The thesis GENERATOR

An exploration of focused randomization applied to the creative process. This thesis/project generator is a work-in-progress and it’s intended for students, artists and designers who have the itch to make something but don’t know where to begin. The first draft was a simple spreadsheet and that data has since been brought into javascript to generate concepts. Riffing on source code from Justin Bakse’s Computational Form class at Parsons School of Design.

My first, non-code, draft of this project.


The code below uses customizable prefixes, pronouns, adjectives and mini-phrases to create thesis and project concepts. 


document.getElementById("title").textContent = generateTitle();

document.getElementById("subtitle").textContent = generateSubtitle();


function generateTitle() {

var name_prefixes = ["visually rich", "non-visual", "family/Inter-generational", "immersive", "hands on", "surprising", "memorable", "critical", "speculative", "educational", "compact", "funny", "engaging", "inclusive", "shocking", "relaxing", "proactive", "intuitive", "illustrated", "lo-poly", "sarcastic"];

var primary_nouns = ["VR", "AR", "Ai", "wearables", "Processing", "chatbots", "sculptural", "Open Frameworks", "p5.js", "interactive fiction", "sketch", "painting", "projection mapping", "film", "web series", "animation", "hand-made", "IoT", "digital", "Chrome extension", "sharable"];

var adjectives = ["Lost", "Five", "Faded", "Ancient", "Blackened", "Den of", "Despairing", "Golden", "Many", "Merry", "Clever", "Wonderful", "Sullen", "Angry", "Little", "Cowardly", "Silver", "Lasting", "Heavy", "Festive", "Gleeful", "Enchanted", "Wise", "wistful", "dark", "untold", "analog", "erotic", "sensual"];

var secondary_nouns = ["Hearts", "Stones", "Diamond Dogs", "Painted Toes", "Songs", "Tales", "Lords", "Promise", "Screams", "Plagues", "Dreams", "Roads", "Curses", "Spells", "Gloam", "Lands", "Marsh", "Hearts", "Rules", "Swamp", "Tale", "Apex", "Beggar"];

var name_prefix = sample(name_prefixes);

var primary_noun = sample(primary_nouns);

var adjective = sample(adjectives);

var secondary_noun = sample(secondary_nouns);

var title = "";

if (Math.random() < 0.5) {

title = `${name_prefix} ${primary_noun} and the ${adjective} ${secondary_noun}`;

} else {

title = `The ${adjective} ${secondary_noun} of ${name_prefix} ${primary_noun}`;


return title;



function generateSubtitle() {

var story_adjectives = ["personal", "societal", "global", "reusable", "emotional", "interactive", "surprising", "replayable", "cross platform", "thought provoking", "darkly humorous", "portable", "multiplayer", "emphathetic", "meditative", "tattooed", "confrontational", "political", "instructional"];

var story_formats = ["game", "installation", "data visualization", "social experiement", "manifesto", "product", "service", "documentary", "app", "self promotional piece", "recipe", "training service", "collage", "song", "conversation", "narrative", "public intervention", "performance", "comic book", "animation", "instrument", "web series"];

var adjective = sample(story_adjectives);

var format = sample(story_formats);

var subtitle = `A/An ${adjective} ${format}`;

return subtitle;


function sample(array) {

const index = Math.floor(Math.random() * array.length);

return array[index];


function injectInterface() {

document.body.insertAdjacentHTML('beforeend', `

<style type="text/css">

@import url(',700');

body {

text-align: center;

font-family: 'Roboto', sans-serif;


.wrap {

display: table;

padding: 50px;

margin: 50px auto;

text-align: center;


#title {

font-size: 50px;

font-weight: bold;

text-transform: uppercase;

line-height: .9em;


#subtitle {

margin-top: .75em;

font-weight: 300;

font-size: 25px;

font-weight: normal;



<div class="wrap">

<div id="title">Title</div>

<div id="subtitle">Subtitle</div>