Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
154 kB · 2172 lines
HTML
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>papers · Aesthetic Computer</title> <meta name="description" content="Academic papers on Aesthetic Computer and KidLisp."> <meta property="og:title" content="papers — Aesthetic.Computer" /> <meta property="og:description" content="Papers by @jeffrey on creative computing, KidLisp, and Aesthetic Computer." /> <meta property="og:image" content="https://papers.aesthetic.computer/papers-og.jpg" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://papers.aesthetic.computer" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://papers.aesthetic.computer/papers-og.jpg" /> <link rel="icon" href="https://aesthetic.computer/icon/128x128/prompt.png" type="image/png" /> <link rel="preload" as="image" href="/papers-header-v5.png" fetchpriority="high" /> <link rel="preload" as="image" href="/papers-header-v6.png" /> <link rel="preload" as="image" href="/papers-header-v7.png" /> <link rel="alternate" type="application/atom+xml" title="papers · Aesthetic Computer" href="/feed.xml" /> <link rel="alternate" type="application/rss+xml" title="papers · Aesthetic Computer" href="/rss.xml" /> <link rel="stylesheet" href="https://aesthetic.computer/type/webfonts/berkeley-mono-variable.css"> <link rel="stylesheet" href="https://aesthetic.computer/type/webfonts/ywft-processing-regular.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.2.3/css/flag-icons.min.css" /> <style> :root { --bg: #1a1a2e; --text: #e8e8e8; --dim: #777; --pink: #cd5c9b; --cyan: #4ecdc4; --purple: #7850b4; --sep: rgba(255,255,255,0.06); --box-bg: rgba(255,255,255,0.03); --box-border: rgba(255,255,255,0.1); --col-divider: rgba(255,255,255,0.08); --logo-shadow: #000; }
@media (prefers-color-scheme: light) { :root:not(.dark-mode) { --bg: #fafafa; --text: #1a1a2e; --dim: #888; --pink: #b4489a; --cyan: #0891b2; --purple: #7850b4; --sep: rgba(0,0,0,0.06); --box-bg: rgba(0,0,0,0.03); --box-border: rgba(0,0,0,0.1); --col-divider: rgba(0,0,0,0.08); --logo-shadow: #fff; } } :root.light-mode { --bg: #fafafa; --text: #1a1a2e; --dim: #888; --pink: #b4489a; --cyan: #0891b2; --purple: #7850b4; --sep: rgba(0,0,0,0.06); --box-bg: rgba(0,0,0,0.03); --box-border: rgba(0,0,0,0.1); --col-divider: rgba(0,0,0,0.08); --logo-shadow: #fff; }
* { margin: 0; padding: 0; box-sizing: border-box; } body { background: var(--bg); color: var(--text); font-family: 'Berkeley Mono Variable', monospace; font-size: 14px; line-height: 1.6; padding: 1em 1.1em; max-width: 1100px; margin: 0 auto; }
.top-bar { display: flex; align-items: center; gap: 8px; margin-bottom: 0.5em; }
.logo { cursor: pointer; font-size: 1.6em; line-height: 1.1; } .logo:hover { opacity: 0.8; } .logo-papers { font-family: 'Berkeley Mono Variable', monospace; font-weight: 500; color: var(--text); } .logo-sep { color: var(--dim); margin: 0 0.3em; font-family: 'Berkeley Mono Variable', monospace; } .logo-ac { font-family: 'YWFTProcessing-Regular', sans-serif; font-size: 1.15em; color: var(--pink); } .logo-dot { color: var(--cyan); }
/* Language selector */ .lang-selector { position: relative; display: flex; align-items: center; gap: 4px; padding: 6px 10px; cursor: pointer; font-size: 12px; user-select: none; border-radius: 4px; border: 1px solid var(--box-border); background: var(--bg); box-shadow: 0 1px 3px rgba(0,0,0,0.22); transition: background 0.15s, border-color 0.15s, box-shadow 0.15s; margin-left: auto; } .lang-selector:hover { background: var(--box-bg); border-color: var(--pink); box-shadow: 0 2px 6px rgba(0,0,0,0.28); } .lang-selector .lang-flag { font-size: 14px; } .lang-selector .lang-text { font-size: 12px; color: var(--text); font-weight: 600; } .lang-selector .lang-arrow { font-size: 8px; color: var(--text); opacity: 0.75; margin-left: 2px; }
.lang-dropdown { position: absolute; top: 100%; right: 0; background: var(--bg); border: 1px solid var(--box-border); border-radius: 4px; box-shadow: 0 8px 24px rgba(0,0,0,0.35); z-index: 100; min-width: 110px; margin-top: 2px; display: none; } .lang-selector.open .lang-dropdown { display: block; }
.lang-option { padding: 8px 12px; cursor: pointer; font-size: 12px; color: var(--text); transition: all 0.15s; display: flex; align-items: center; gap: 6px; } .lang-option:hover { background: rgba(205,92,155,0.1); } .lang-option.active { color: var(--pink); }
.lang-badge { display: inline-block; font-size: 0.5em; padding: 1px 5px; border-radius: 3px; background: var(--pink); color: var(--bg); font-weight: 600; vertical-align: middle; margin-left: 6px; text-transform: uppercase; letter-spacing: 0.05em; opacity: 0; transition: opacity 0.2s; } .lang-badge.visible { opacity: 1; }
/* Top-right bills link */ .top-link { display: inline-flex; align-items: center; gap: 4px; padding: 6px 10px; font-size: 12px; font-weight: 500; color: var(--dim); text-decoration: none; border: 1px solid var(--box-border); border-radius: 4px; transition: color 0.15s, border-color 0.15s, background 0.15s; } .top-link:hover { color: var(--pink); border-color: var(--pink); background: var(--box-bg); } .top-link .top-link-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--pink); display: inline-block; }
.sub { color: var(--dim); font-size: 0.8em; margin-bottom: 0.6em; } .sub a { color: var(--cyan); text-decoration: none; } /* Intro prose — site description at the top */ .intro { color: var(--text); opacity: 0.85; font-family: 'Times New Roman', Times, Georgia, serif; font-size: 1.02em; line-height: 1.6; margin: 0.2em 0 0.8em; max-width: 70ch; } .intro a { color: var(--purple); text-decoration: none; } .intro a:hover { text-decoration: underline; } .intro a.ac-link { color: inherit; } .intro a.ac-link:hover { text-decoration: none; opacity: 0.8; }
/* Active proposals — pinned strip at top of papers index */ .active-proposals { margin: 0.4em 0 1.2em; padding: 0.7em 0.85em 0.85em; border: 1px solid var(--box-border); border-left: 3px solid var(--pink); border-radius: 4px; background: var(--box-bg); } .ap-header { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 0.55em; font-size: 0.75em; } .ap-eyebrow { color: var(--pink); text-transform: uppercase; letter-spacing: 0.1em; font-weight: 600; } .ap-all { color: var(--dim); text-decoration: none; } .ap-all:hover { color: var(--cyan); } .ap-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0.45em; } .ap-card { display: block; padding: 0.55em 0.7em; background: var(--bg); border: 1px solid var(--box-border); border-radius: 3px; text-decoration: none; transition: border-color 0.15s, transform 0.15s; } .ap-card:hover { border-color: var(--pink); transform: translateY(-1px); } .ap-card .ap-title { font-family: 'YWFTProcessing-Regular', 'Berkeley Mono Variable', monospace; color: var(--text); font-size: 1.05em; line-height: 1.2; margin-bottom: 0.15em; } .ap-card .ap-venue { color: var(--dim); font-size: 0.78em; line-height: 1.3; } .ap-card .ap-meta { display: flex; gap: 0.5em; align-items: center; margin-top: 0.4em; font-size: 0.72em; font-variant-numeric: tabular-nums; } .ap-card .ap-countdown { padding: 0.05em 0.4em; border: 1px solid var(--box-border); border-radius: 10px; color: var(--dim); } .ap-card .ap-countdown.urgent { color: var(--pink); border-color: var(--pink); } .ap-card .ap-countdown.soon { color: var(--purple); border-color: var(--purple); } .ap-card .ap-countdown.ok { color: var(--cyan); border-color: var(--cyan); } .ap-card .ap-deadline { color: var(--dim); }
/* Sort bar */ .sort-bar { display: flex; gap: 4px; margin-bottom: 0.8em; font-size: 11px; flex-wrap: wrap; } .sort-btn { cursor: pointer; background: none; border: 1px solid var(--box-border); color: var(--dim); font-family: inherit; font-size: inherit; padding: 3px 10px; border-radius: 12px; transition: all 0.15s; user-select: none; } .sort-btn:hover { border-color: var(--pink); color: var(--text); } .sort-btn.active { background: var(--pink); color: var(--bg); border-color: var(--pink); font-weight: 600; }
/* Papers grid */ .papers-grid { display: grid; grid-template-columns: 1fr; gap: 0; }
.p { padding: 0.45em 0.6em; border-bottom: 1px solid var(--sep); border-radius: 3px; transition: background 0.15s; cursor: pointer; display: flex; gap: 0.85em; align-items: flex-start; } .p:nth-child(even) { background: var(--sep); } .p:hover { background: var(--box-bg); } .p a { text-decoration: none; } .p .body { flex: 1 1 auto; min-width: 0; } .p .thumb-col { flex: 0 0 auto; width: 78px; display: flex; flex-direction: column; gap: 0.4em; } .p .thumb { width: 100%; display: block; line-height: 0; border-radius: 2px; overflow: hidden; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,0.18), 0 0 0 1px var(--box-border); transition: transform 0.18s ease, box-shadow 0.18s ease; } .p .thumb img { width: 100%; /* Crop into the illustration — top half of the figure */ aspect-ratio: 1 / 0.62; height: auto; object-fit: cover; object-position: 50% 12%; display: block; } .p:hover .thumb { transform: translateY(-1px); box-shadow: 0 3px 10px rgba(0,0,0,0.28), 0 0 0 1px var(--cyan); } /* Cards + translation links under each illustration */ .p .thumb-links { display: flex; flex-wrap: wrap; gap: 0.2em 0.35em; justify-content: center; line-height: 1.1; } .p .thumb-links .tl { font-size: 0.62em; letter-spacing: 0.03em; color: var(--dim); text-transform: uppercase; white-space: nowrap; } .p .thumb-links .tl:hover { color: var(--cyan); } .p .thumb-links .tl-cards { color: var(--purple); font-weight: 600; } .p .thumb-links .tl-podcast { color: var(--pink); font-weight: 600; } @media (max-width: 480px) { .p .thumb-col { width: 56px; } } .p .title { font-size: 1.02em; font-weight: 500; letter-spacing: -0.005em; line-height: 1.3; } .p .title a { color: var(--text); } .p:hover .title a { color: var(--cyan); } .p .detail { color: var(--dim); font-size: 0.76em; margin-top: 0.1em; line-height: 1.4; } .p .detail a { color: var(--purple); } .p .detail a:hover { text-decoration: underline; } .p .abstract { color: var(--text); opacity: 0.72; font-family: 'Times New Roman', Times, Georgia, serif; font-style: italic; font-size: 0.92em; margin-top: 0.2em; line-height: 1.45; max-width: 72ch; } .p .meta-row { display: flex; gap: 0.7em; font-size: 0.7em; margin-bottom: 0.05em; align-items: center; flex-wrap: wrap; } .p .meta-row .hits { color: var(--cyan); } .p .meta-row .author { color: var(--pink); font-weight: 500; } .p .updated { color: var(--cyan); opacity: 0.85; } .p .created { color: var(--dim); opacity: 0.7; } .p .revisions { color: var(--purple); opacity: 0.75; }
/* Colophon */ /* Guest papers section */ .guest-header { margin-top: 2em; margin-bottom: 0.6em; font-size: 0.8em; color: var(--dim); text-transform: lowercase; letter-spacing: 0.05em; border-top: 1px solid var(--sep); padding-top: 1em; } .p.guest .meta-row .author { color: var(--purple); }
/* Dossiers section — fact-surfacing lane, its own container so the client-side sort (which reorders only .papers-list) never scrambles it. */ .papers-list { display: contents; } .dossiers-header { margin-top: 2.4em; margin-bottom: 0.15em; font-size: 1.05em; font-weight: 600; color: var(--text); text-transform: lowercase; letter-spacing: 0.04em; border-top: 1px solid var(--sep); padding-top: 1em; } .dossiers-header .dh-semi { color: var(--pink); } .dossiers-sub { margin-bottom: 0.8em; font-size: 0.8em; color: var(--dim); } .dossiers-list { display: contents; }
/* === Category sections === */ .cat { margin-top: 1.2em; } .cat:first-of-type { margin-top: 0.5em; } .cat-head { display: flex; align-items: baseline; gap: 0.35em; font-size: 1.05em; font-weight: 600; color: var(--text); letter-spacing: 0.04em; border-top: 1px solid var(--sep); padding-top: 1em; margin-bottom: 0.15em; cursor: pointer; user-select: none; } .cat-head:hover .cat-name { color: var(--cyan); } .cat-head:focus-visible { outline: 2px solid var(--cyan); outline-offset: 3px; border-radius: 3px; } .cat-chevron { font-size: 0.7em; color: var(--dim); margin-right: 0.1em; transition: transform 0.18s ease; } .cat.collapsed .cat-chevron { transform: rotate(-90deg); } .cat.collapsed .cat-list, .cat.collapsed .cat-sub { display: none; } .cat-head .cat-semi { color: var(--pink); margin-left: -0.28em; } .cat-head .cat-count { margin-left: 0.25em; font-size: 0.62em; font-weight: 500; color: var(--dim); border: 1px solid var(--box-border); border-radius: 999px; padding: 0.05em 0.55em; letter-spacing: 0; line-height: 1.6; } .cat-sub { margin-bottom: 0.8em; font-size: 0.8em; color: var(--dim); max-width: 72ch; } .cat-list { display: block; }
/* Archive — quiet, deprecated lane at the bottom */ .cat--archive .cat-head, .cat--archive .cat-head .cat-semi { color: var(--dim); } .cat--archive .cat-list .p { opacity: 0.5; transition: opacity 0.15s, background 0.15s; } .cat--archive .cat-list .p:hover { opacity: 0.92; } /* Archived papers don't get the loud psycho treatment */ .cat--archive .p.psycho { animation: none; border-left: none; } .cat--archive .p.psycho::before { display: none; }
/* === Mobile: dense 3-up cover grid (bookshelf) === */ @media (max-width: 600px) { .cat-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.7em 0.6em; } .cat-list .p { flex-direction: column; align-items: stretch; gap: 0.4em; padding: 0.15em 0.1em 0.3em; border-bottom: none; border-radius: 4px; min-width: 0; } .cat-list .p:nth-child(even) { background: none; } .cat-list .p .thumb-col { width: 100%; } .cat-list .p .body { width: 100%; min-width: 0; } .cat-list .p .detail, .cat-list .p .abstract, .cat-list .p .meta-row, .cat-list .p .format-icons { display: none; } .cat-list .p .title { font-size: 0.72em; line-height: 1.22; font-weight: 500; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } /* Cards with no thumbnail still need a tappable target */ .cat-list .p:not(:has(.thumb)) { padding-top: 0.4em; } .cat-sub { display: none; } }
.colophon { margin-top: 1em; padding-top: 1.2em; border-top: 1px solid var(--sep); color: var(--dim); font-family: 'Times New Roman', Times, Georgia, serif; font-size: 1em; line-height: 1.7; } .colophon p { margin-bottom: 0.8em; } .colophon p:last-child { margin-bottom: 0; } .colophon a { color: var(--purple); text-decoration: none; } .colophon a:hover { text-decoration: underline; } .colophon a.ac-link { color: inherit; } .colophon a.ac-link:hover { text-decoration: none; opacity: 0.8; } /* .filesize replaced by .fmt-label in format icons */
/* === PSYCHO papers === */ .p.psycho { animation: psycho-wiggle 3s ease-in-out infinite; transform-origin: center; border-left: 2px solid var(--pink); position: relative; overflow: visible; } .p.psycho::before { content: 'PSYCHO'; position: absolute; top: 0.2em; right: 0.4em; font-size: 1.1em; font-weight: 900; letter-spacing: 0.2em; text-transform: uppercase; animation: psycho-blink 0.6s steps(1) infinite; } @keyframes psycho-blink { 0% { color: #ff2222; background: #000; padding: 1px 6px; } 25% { color: #ffdd00; background: transparent; padding: 1px 6px; } 50% { color: #000; background: #fff; padding: 1px 6px; } 75% { color: #fff; background: #ff2222; padding: 1px 6px; } } .p.psycho .title .psycho-char { display: inline-block; animation: psycho-color 4s linear infinite, psycho-letter-wiggle 2s ease-in-out infinite; } .p.psycho:hover .title .psycho-char { animation: psycho-color 0.8s linear infinite, psycho-letter-wiggle 0.4s ease-in-out infinite; } @keyframes psycho-wiggle { 0%, 100% { transform: rotate(0deg); } 15% { transform: rotate(-0.3deg) translateX(-0.5px); } 30% { transform: rotate(0.2deg) translateY(0.5px); } 50% { transform: rotate(-0.15deg); } 70% { transform: rotate(0.25deg) translateX(0.3px); } 85% { transform: rotate(-0.1deg) translateY(-0.3px); } } @keyframes psycho-color { 0% { color: #cd5c9b; } 16% { color: #7850b4; } 33% { color: #4ecdc4; } 50% { color: #e8e860; } 66% { color: #ff6b6b; } 83% { color: #4ecdc4; } 100% { color: #cd5c9b; } } @keyframes psycho-letter-wiggle { 0%, 100% { transform: translateY(0); } 25% { transform: translateY(-1px) rotate(-2deg); } 75% { transform: translateY(1px) rotate(2deg); } } /* psycho-pulse replaced by psycho-blink */
/* Format icons row */ .format-icons { display: inline-flex; align-items: center; gap: 10px; margin-left: 6px; vertical-align: middle; } .fmt-icon { display: inline-flex; flex-direction: column; align-items: center; text-decoration: none; opacity: 0.55; transition: opacity 0.2s; } .fmt-icon:hover { opacity: 1; } .fmt-icon svg { display: block; } .fmt-icon .fmt-label { font-size: 0.55em; color: var(--dim); margin-top: 1px; line-height: 1; }
/* Cards icon wobble animation */ .fmt-icon.cards-icon:hover .card-back { animation: card-wobble 0.4s ease-in-out; } @keyframes card-wobble { 0% { transform: translate(0, 0) rotate(0); } 25% { transform: translate(-1px, -1px) rotate(-3deg); } 50% { transform: translate(0, 0) rotate(0); } 75% { transform: translate(1px, -0.5px) rotate(2deg); } 100% { transform: translate(0, 0) rotate(0); } }
.footer { margin-top: 2.5em; padding-top: 1em; border-top: 1px solid var(--sep); color: var(--dim); font-size: 0.7em; display: flex; justify-content: space-between; align-items: center; } .footer a { color: var(--purple); text-decoration: none; } .footer button { cursor: pointer; background: none; border: 1px solid var(--sep); color: var(--dim); font-family: inherit; font-size: inherit; padding: 0.2em 0.5em; border-radius: 3px; }
.pals { position: fixed; bottom: 1.2em; right: 1.2em; width: 48px; opacity: 0.4; } .pals:hover { opacity: 1; }
/* Top-of-page build progress bar — thin, unobtrusive */ .build-bar { position: fixed; top: 0; left: 0; height: 2px; width: 0%; background: var(--cyan); opacity: 0; transition: width 0.4s ease, opacity 0.6s ease; z-index: 9999; pointer-events: none; } .build-bar.active { opacity: 0.85; } .build-bar.done { background: #4caf50; width: 100% !important; } .build-bar.fail { background: #e53935; }
/* === HERO BANNER (Grant-Wood broadsheet, full-bleed) === */ .hero { position: relative; isolation: isolate; /* Full-bleed across viewport regardless of body max-width / padding */ width: 100vw; margin-left: calc(50% - 50vw); margin-top: -1em; margin-bottom: 1.4em; padding: 0; overflow: hidden; aspect-ratio: 1536 / 1024; max-height: 34vh; min-height: 160px; /* Purple letterbox the colored-pencil images soft-fade into. */ background-color: var(--purple); } .hero-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; opacity: 0; transition: opacity 1.8s ease-out; } .hero-canvas.loaded { opacity: 1; } /* Bottom linear fade into the page background. Sits above the canvas so the hero dissolves into the body color rather than ending on a hard edge. */ .hero::after { content: ''; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(to bottom, transparent 0%, transparent 55%, var(--bg) 100%); z-index: 2; }
/* === Prompt-HUD corner label (modeled after give.aesthetic.computer) === */ .top-bar { position: fixed; top: 0; left: 0; width: 100%; max-width: 100vw; display: flex; justify-content: space-between; align-items: center; padding: 10px 16px; z-index: 1000; pointer-events: none; } .top-bar > * { pointer-events: auto; } .top-bar .logo { font-size: 22px; line-height: 1; } .top-bar .logo-papers { font-family: 'Times New Roman', Times, Georgia, serif; font-style: italic; font-weight: 700; font-size: 1.05em; color: var(--text); text-shadow: 1px 1px 0 var(--cyan), -1px 1px 0 var(--pink), 1px -1px 0 var(--purple), -1px -1px 0 var(--logo-shadow), 0 0 8px rgba(0,0,0,0.35); } .top-bar .logo-sep { font-family: 'Berkeley Mono Variable', monospace; color: var(--dim); margin: 0 0.3em; text-shadow: 1px 1px 0 var(--cyan), -1px 1px 0 var(--pink), 1px -1px 0 var(--purple), -1px -1px 0 var(--logo-shadow); } .top-bar .logo-ac { font-family: 'YWFTProcessing-Regular', sans-serif; font-size: 1.15em; color: var(--pink); text-shadow: 1px 1px 0 var(--cyan), -1px 1px 0 var(--purple), 1px -1px 0 var(--logo-shadow), -1px -1px 0 var(--logo-shadow), 0 0 8px rgba(0,0,0,0.35); } .top-bar .logo-dot { color: var(--cyan); }
/* === MOBILE (<600px) === */ @media (max-width: 599px) { body { padding: 0.6em 0.9em; } .hero { margin-top: -0.6em; margin-bottom: 0.7em; max-height: 140px; } .top-bar .logo { font-size: 13px; white-space: nowrap; } .lang-selector .lang-text { display: none; } .p .title { font-size: 0.98em; } .p .detail { font-size: 0.7em; } .p { padding: 0.3em 0.5em; } }
/* === DESKTOP (900px+) — wider, dense === */ @media (min-width: 900px) { body { max-width: 1100px; padding: 2em 3em; font-size: 16px; } .hero { margin-top: -2em; margin-bottom: 1em; max-height: 240px; } .p .title { font-size: 1.15em; } .p .detail { font-size: 0.82em; } .p { padding: 0.45em 0.6em; } .footer { font-size: 0.8em; } }
/* === XL (1400px+) — even wider, still dense === */ @media (min-width: 1400px) { body { max-width: 1300px; padding: 2.5em 4em; font-size: 17px; } .hero { margin-top: -2.5em; margin-bottom: 1.2em; max-height: 280px; } .p .title { font-size: 1.22em; } .p .detail { font-size: 0.85em; } .pals { width: 64px; } }
/* === DESIGN TRIAL: illustration + title gallery === */ .cat-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 1.3em 1em; align-items: start; } .cat-list .p { flex-direction: column; align-items: stretch; gap: 0.5em; padding: 0.2em; border-bottom: none; border-radius: 4px; } .cat-list .p:nth-child(even) { background: none; } .cat-list .p:hover { background: none; } .cat-list .p .thumb-col { width: 100%; } .cat-list .p .body { width: 100%; min-width: 0; } .cat-list .p .detail, .cat-list .p .abstract, .cat-list .p .meta-row, .cat-list .p .format-icons { display: none; } .cat-list .p .title { font-size: 0.8em; line-height: 1.28; font-weight: 500; text-align: center; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } </style></head><body> <div class="build-bar" id="buildBar"></div> <a href="https://aesthetic.computer" class="pals"><img src="https://aesthetic.computer/purple-pals.svg" alt="AC" style="width:100%"></a>
<div class="top-bar"> <div class="logo" onclick="window.location.href='https://aesthetic.computer'"><span class="logo-papers">papers</span><span class="logo-sep">—</span><span class="logo-ac">Aesthetic<span class="logo-dot">.</span>Computer</span></div> <div class="lang-selector" id="langSelector"> <span class="lang-flag fi fi-us" id="lang-flag"></span> <span class="lang-text" id="lang-text">English</span> <span class="lang-arrow">▼</span> <div class="lang-dropdown" id="lang-dropdown"> <div class="lang-option active" data-lang="en" data-flag="us"><span class="fi fi-us"></span> English</div> <div class="lang-option" data-lang="da" data-flag="dk"><span class="fi fi-dk"></span> Dansk</div> <div class="lang-option" data-lang="es" data-flag="es"><span class="fi fi-es"></span> Español</div> <div class="lang-option" data-lang="zh" data-flag="cn"><span class="fi fi-cn"></span> 中文</div> <div class="lang-option" data-lang="ja" data-flag="jp"><span class="fi fi-jp"></span> 日本語</div> <div class="lang-option" data-lang="ru" data-flag="ru"><span class="fi fi-ru"></span> Русский</div> </div> </div> </div>
<header class="hero" aria-label="papers"> <canvas class="hero-canvas" id="heroCanvas" aria-hidden="true"></canvas> </header>
<div class="intro"> <p>Papers publishes working research on the <a href="https://aesthetic.computer" class="ac-link"><span class="logo-ac">Aesthetic<span class="logo-dot">.</span>Computer</span></a> project authored by <a href="https://prompt.ac/@jeffrey">@jeffrey</a>.</p> </div>
<!-- ===== ACTIVE PROPOSALS (live public previews, sorted by closest deadline) ===== --> <div class="active-proposals" id="activeProposals"> <div class="ap-header"> <span class="ap-eyebrow">Active proposals</span> <a class="ap-all" href="/deadlines">all deadlines →</a> </div> <div class="ap-list" id="apList"></div> </div>
<div class="sort-bar" id="sortBar"> <button class="sort-btn active" data-sort="fresh">freshest</button> <button class="sort-btn" data-sort="updated">last edited</button> <button class="sort-btn" data-sort="created">recently added</button> <button class="sort-btn" data-sort="hits">top hits</button> </div>
<div class="papers-list"> <!-- papers-start -->
<section class="cat collapsed" data-cat="platform"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Platform & Language</span><span class="cat-count">14</span></div> <div class="cat-sub">The runtime, the language, and the surfaces you actually touch.</div> <div class="cat-list">
<div class="p" data-paper-id="keymaps" data-created="2026-05-02" data-updated="2026-06-13T23:44:42.265Z"> <div class="thumb-col"><a class="thumb" href="/keymaps-social-software-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/keymaps-social-software-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/keymaps-social-software-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/keymaps-social-software-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/keymaps-social-software-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/keymaps-social-software-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/keymaps-social-software-26-arxiv-ja.pdf" title="Japanese">JA</a><a class="tl tl-lang" href="/keymaps-social-software-26-arxiv-ru.pdf" title="Russian">RU</a></div></div><div class="body"> <div class="title"><a href="/keymaps-social-software-26-arxiv.pdf" data-base="/keymaps-social-software-26-arxiv">Keymaps as Social Software</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 19</span><span class="updated" title="Last updated">Jun 13 16:44</span></div> </div> </div>
<div class="p" data-paper-id="ac" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/aesthetic-computer-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-computer-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/aesthetic-computer-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/aesthetic-computer-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/aesthetic-computer-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/aesthetic-computer-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/aesthetic-computer-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/aesthetic-computer-26-arxiv.pdf" data-base="/aesthetic-computer-26-arxiv">Aesthetic Computer '26</a></div> <div class="detail">A Mobile-First Runtime for Creative Computing · arXiv 5pp</div> <div class="abstract">Aesthetic Computer is presented as a mobile-first creative computing runtime where the interface, publishing flow, and community feedback loop are part of the medium. The paper argues that small pieces can make software feel more social, more portable, and easier to share.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="kidlisp" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/kidlisp-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/kidlisp-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/kidlisp-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/kidlisp-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/kidlisp-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/kidlisp-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/kidlisp-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/kidlisp-26-arxiv.pdf" data-base="/kidlisp-26-arxiv">KidLisp '26</a></div> <div class="detail">A Minimal Lisp for Generative Art on a Social Platform · arXiv 6pp</div> <div class="abstract">KidLisp is the platform's tiny Lisp for building visual and musical pieces in the browser. The paper shows how a minimal language can stay approachable while still supporting generative art and composition.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="os" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/ac-native-os-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/ac-native-os-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/ac-native-os-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/ac-native-os-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/ac-native-os-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/ac-native-os-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/ac-native-os-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/ac-native-os-26-arxiv.pdf" data-base="/ac-native-os-26-arxiv">AC Native OS</a></div> <div class="detail">A Bare-Metal Creative Computing Operating System · arXiv 5pp</div> <div class="abstract">AC Native OS describes a bare-metal runtime for creative computing. It focuses on boot-time simplicity and the idea that the operating system itself can be a programmable art surface.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="api" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/piece-api-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/piece-api-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/piece-api-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/piece-api-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/piece-api-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/piece-api-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/piece-api-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/piece-api-26-arxiv.pdf" data-base="/piece-api-26-arxiv">From setup() to boot()</a></div> <div class="detail">Processing at the Core of the Piece API · arXiv 7pp</div> <div class="abstract">The Piece API rethinks creative software around composable pieces instead of monolithic apps. It uses Processing's lineage to connect setup(), boot(), and the act of publishing.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="pieces" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/pieces-not-programs-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/pieces-not-programs-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/pieces-not-programs-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/pieces-not-programs-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/pieces-not-programs-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/pieces-not-programs-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/pieces-not-programs-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/pieces-not-programs-26-arxiv.pdf" data-base="/pieces-not-programs-26-arxiv">Pieces Not Programs</a></div> <div class="detail">The Piece as a Unit of Creative Cognition · arXiv 4pp</div> <div class="abstract">A piece is treated here as the basic unit of creative cognition in AC. The paper argues that smaller, shareable pieces encourage composition, remix, and publication.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="notepat" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/notepat-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/notepat-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/notepat-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/notepat-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/notepat-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/notepat-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/notepat-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/notepat-26-arxiv.pdf" data-base="/notepat-26-arxiv">notepat.com</a></div> <div class="detail">From Keyboard Toy to System Front Door · arXiv 5pp</div> <div class="abstract">notepat.com is framed as a keyboard-first front door to the system. The paper follows the toy-like input surface as it grows into a fuller creative interface.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="kidlisp-ref" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/kidlisp-reference-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/kidlisp-reference-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/kidlisp-reference-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/kidlisp-reference-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/kidlisp-reference-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/kidlisp-reference-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/kidlisp-reference-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/kidlisp-reference-26-arxiv.pdf" data-base="/kidlisp-reference-26-arxiv">KidLisp Language Reference</a></div> <div class="detail">118 Built-ins in 12 Categories · arXiv 4pp</div> <div class="abstract">The KidLisp reference compresses the language into a usable field guide. It groups 118 built-ins into 12 categories for quick browsing and recall.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="identity" data-created="2026-03-27" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/handle-identity-atproto-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/handle-identity-atproto-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/handle-identity-atproto-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/handle-identity-atproto-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/handle-identity-atproto-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/handle-identity-atproto-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/handle-identity-atproto-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/handle-identity-atproto-26-arxiv.pdf" data-base="/handle-identity-atproto-26-arxiv">Handle Identity on the AT Protocol</a></div> <div class="detail"></div> <div class="abstract">Handle Identity on the AT Protocol treats naming as a social and technical problem. The paper explores how handles, identity, and publishing can be tied together without losing portability.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/27</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="kidlisp-cards" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/kidlisp-cards-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/kidlisp-cards-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/kidlisp-cards-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/kidlisp-cards-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/kidlisp-cards-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/kidlisp-cards-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/kidlisp-cards-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/kidlisp-cards-26-arxiv.pdf" data-base="/kidlisp-cards-26-arxiv">KidLisp Cards</a></div> <div class="detail"></div> <div class="abstract">KidLisp Cards condenses the language into a pocketable card format. It is meant to make the language easier to browse, teach, and carry.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="url-tradition" data-created="2026-04-27" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/url-tradition-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/url-tradition-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/url-tradition-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/url-tradition-26-arxiv.pdf" data-base="/url-tradition-26-arxiv">The URL Tradition</a></div> <div class="detail">Addressable Creative Computing from Lovelace's Footnotes to Aesthetic Computer · arXiv</div> <div class="abstract">The URL Tradition traces address-thinking from Lovelace's footnotes, Bush's trails, Xanadu, and the Negro Motorist Green Book through net.art, single-serving sites, the tilde, Glitch, and Aesthetic Computer's prompt-as-address-bar. It argues the URL is not a feature but a medium property that reshapes authorship, distribution, pedagogy, performance, and political claim.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">04/27</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="latency" data-created="2026-04-26" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/where-the-microseconds-go-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/where-the-microseconds-go-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/where-the-microseconds-go-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/where-the-microseconds-go-26-arxiv.pdf" data-base="/where-the-microseconds-go-26-arxiv">Where the Microseconds Go</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">04/26</span><span class="revisions" title="Revision count">revision 8</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="penrose" data-no-cards="1" data-created="2026-04-28" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/diagrams-from-data-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/diagrams-from-data-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a></div><div class="body"> <div class="title"><a href="/diagrams-from-data-26-arxiv.pdf" data-base="/diagrams-from-data-26-arxiv">Diagrams from Data</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">04/28</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="cal" data-no-cards="1" data-created="2026-06-15" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/cal-aesthetical-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/cal-aesthetical-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a></div><div class="body"> <div class="title"><a href="/cal-aesthetical-26-arxiv.pdf" data-base="/cal-aesthetical-26-arxiv">AesthetiCal: A URL-Addressable Calendar</a></div> <div class="detail">A URL-Addressable Calendar for Aesthetic Computer · arXiv 6pp</div> <div class="abstract">AesthetiCal adds time to Aesthetic Computer as a piece, not a second app: month/week/day views and a DateWizard share a per-handle synced store, addressable by permahandle and interchangeable as standard iCalendar. The paper describes the shipped v1 and sketches the next phase — bookable shows, invites, and the Aestheticks ticketing tie-in.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">06/15</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div> </div> </section>
<section class="cat collapsed" data-cat="essays"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Essays & Criticism</span><span class="cat-count">20</span></div> <div class="cat-sub">Arguments about creative computing — its lineage, its players, and its discontents.</div> <div class="cat-list">
<div class="p" data-paper-id="plork" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/plorking-the-planet-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/plorking-the-planet-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/plorking-the-planet-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/plorking-the-planet-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/plorking-the-planet-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/plorking-the-planet-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/plorking-the-planet-26-arxiv-ja.pdf" title="Japanese">JA</a><a class="tl tl-lang" href="/plorking-the-planet-26-arxiv-ru.pdf" title="Russian">RU</a></div></div><div class="body"> <div class="title"><a href="/plorking-the-planet-26-arxiv.pdf" data-base="/plorking-the-planet-26-arxiv">PLOrk'ing the Planet</a></div> <div class="detail">Laptop Orchestras, PLOrk Heritage, and Aesthetic Computer · arXiv</div> <div class="abstract">This paper connects Aesthetic Computer to laptop orchestras and the collaborative traditions of PLOrk. It treats the browser as a place for ensemble practice, not just solo desktop programming.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="who-pays" data-created="2026-03-27" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/who-pays-for-creative-tools-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/who-pays-for-creative-tools-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/who-pays-for-creative-tools-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/who-pays-for-creative-tools-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/who-pays-for-creative-tools-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/who-pays-for-creative-tools-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/who-pays-for-creative-tools-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/who-pays-for-creative-tools-26-arxiv.pdf" data-base="/who-pays-for-creative-tools-26-arxiv">Who Pays for Creative Tools?</a></div> <div class="detail">Funding, Burnout, and Survival in Open-Source Creative Computing · arXiv 5pp</div> <div class="abstract">A short look at who supports open-source creative tools and what that labor costs. The paper connects funding, burnout, and long-term maintenance to the life of artistic software.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/27</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="goodiepal" data-created="2026-03-21" data-updated="2026-05-18T13:16:55.495Z"> <div class="thumb-col"><a class="thumb" href="/radical-computer-art-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/radical-computer-art-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/radical-computer-art-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/radical-computer-art-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/radical-computer-art-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/radical-computer-art-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/radical-computer-art-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/radical-computer-art-26-arxiv.pdf" data-base="/radical-computer-art-26-arxiv">Radical Computer Art</a></div> <div class="detail">Goodiepalian Approaches in Aesthetic Computer · arXiv 5pp</div> <div class="abstract">This paper treats Goodiepalian practice as a model for radical computer art. It emphasizes play, notation, and the social life of systems over polished product design.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">May 18 06:16</span></div> </div> </div>
<div class="p" data-paper-id="whistlegraph" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/whistlegraph-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/whistlegraph-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/whistlegraph-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/whistlegraph-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/whistlegraph-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/whistlegraph-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/whistlegraph-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/whistlegraph-26-arxiv.pdf" data-base="/whistlegraph-26-arxiv">Whistlegraph</a></div> <div class="detail">Drawing, Singing, and the Graphic Score as Viral Form · arXiv 4pp</div> <div class="abstract">Whistlegraph explores drawing, singing, and score-making as forms that can spread like software. The paper links graphic notation to performance, remix, and browser-native sharing.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5648</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="complex" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/sucking-on-the-complex-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/sucking-on-the-complex-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/sucking-on-the-complex-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/sucking-on-the-complex-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/sucking-on-the-complex-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/sucking-on-the-complex-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/sucking-on-the-complex-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/sucking-on-the-complex-26-arxiv.pdf" data-base="/sucking-on-the-complex-26-arxiv">Sucking on the Complex</a></div> <div class="detail">Platform Hegemony, Critique-as-Content, and Anti-Environments · arXiv 5pp</div> <div class="abstract">Sucking on the Complex critiques platform hegemony and the way critique becomes content. It looks for anti-environments that stay messy, resistant, and alive.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="granularity" data-no-cards="1" data-created="2026-07-14" data-updated="2026-07-15T00:53:37.054Z"> <div class="thumb-col"><a class="thumb" href="/gaps-in-granularity-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/gaps-in-granularity-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a></div><div class="body"> <div class="title"><a href="/gaps-in-granularity-26-arxiv.pdf" data-base="/gaps-in-granularity-26-arxiv">Gaps in Granularity</a></div> <div class="detail">Expressive Control and the Impoverishment of Consumer Playback · arXiv 10pp</div> <div class="abstract">A record scratch gives you continuous, gestural, real-time control over a recording; YouTube and Spotify give you a dropdown of round speeds, and some give nothing at all. This paper names that gap 'granularity,' grounds it in the theory of directness and the mature craft of turntablism and elastic audio, and shows that Aesthetic Computer already ships the alternative across its players. The real opening is not that the instrument is impossible, but that it lives everywhere except the default transport of the apps you actually listen and watch through.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">07/14</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 14 17:53</span></div> </div> </div>
<div class="p" data-paper-id="dead-ends" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/dead-ends-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/dead-ends-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/dead-ends-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/dead-ends-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/dead-ends-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/dead-ends-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/dead-ends-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/dead-ends-26-arxiv.pdf" data-base="/dead-ends-26-arxiv">Vestigial Features</a></div> <div class="detail">Dormant Paths, Evolutionary Branches, and Abandoned Approaches · arXiv 4pp</div> <div class="abstract">The paper catalogs dormant branches, abandoned experiments, and paths that never became default. It treats dead ends as useful history rather than failure.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="folk-songs" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/folk-songs-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/folk-songs-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/folk-songs-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/folk-songs-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/folk-songs-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/folk-songs-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/folk-songs-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/folk-songs-26-arxiv.pdf" data-base="/folk-songs-26-arxiv">Playable Folk Songs</a></div> <div class="detail">Oral Tradition Meets the Browser Keyboard · arXiv</div> <div class="abstract">Playable Folk Songs brings oral tradition into the browser keyboard. The paper asks how simple interaction can carry collective memory and repetition.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="futures" data-created="2026-03-20" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/five-years-from-now-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/five-years-from-now-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/five-years-from-now-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/five-years-from-now-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/five-years-from-now-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/five-years-from-now-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/five-years-from-now-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/five-years-from-now-26-arxiv.pdf" data-base="/five-years-from-now-26-arxiv">Five Years from Now</a></div> <div class="detail"></div> <div class="abstract">Five Years from Now is a projection paper about where the project could go if current habits continue. It uses the near future to test the consequences of today's decisions.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/20</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="essay-may-26" data-no-cards="1" data-created="2026-05-25" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/aesthetic-may-26-essay.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-may-26-essay.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-podcast" href="https://assets.aesthetic.computer/podcast/aesthetic-may-26-essay.mp3" title="Listen — a reading in @jeffrey's voice">podcast</a></div></div><div class="body"> <div class="title"><a href="/aesthetic-may-26-essay.pdf" data-base="/aesthetic-may-26-essay">Aesthetic May '26</a></div> <div class="detail">Essay · ~5pp</div> <div class="abstract">Aesthetic May '26 is a magazine-style essay companion to Five Years from Now. May is both the month and the modal verb of possibility; the essay reads the present as a field of branching maybes rather than a line of probabilities --- where the music lane may go, what jeffrey may do, what may not happen this year, and the weather acting on all of it. First entry in the essay-* lane.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/25</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="essay-june-26" data-no-cards="1" data-created="" data-updated="2026-07-15T20:34:39.339Z"> <div class="thumb-col"><a class="thumb" href="/aesthetic-june-26-essay.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-june-26-essay.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-podcast" href="https://assets.aesthetic.computer/podcast/aesthetic-june-26-essay.mp3" title="Listen — a reading in @jeffrey's voice">podcast</a></div></div><div class="body"> <div class="title"><a href="/aesthetic-june-26-essay.pdf" data-base="/aesthetic-june-26-essay">Aesthetic June '26</a></div> <div class="detail">Essay · ~3pp · podcast</div> <div class="abstract">Aesthetic June '26 is the storytelling companion to May. Where May was the modal mood, June is the answer, delivered as four hundred and fifty-seven commits --- the word carrying both its meanings, version control and Juno's oath. Told as scenes: the songs that caught up, the whistle found a perfect fifth sharp, the ring of native wizards learning one sign-in, and a Danish learn-the-clock community getting its own front door on the chat. Also available as a spoken reading in @jeffrey's voice.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 15 13:34</span></div> </div> </div>
<div class="p" data-paper-id="essay-july-4-26" data-no-cards="1" data-created="2026-07-05" data-updated="2026-07-05T22:49:43.040Z"> <div class="thumb-col"><a class="thumb" href="/aesthetic-july-4-26-essay.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-july-4-26-essay.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-podcast" href="https://assets.aesthetic.computer/podcast/aesthetic-july-4-26-essay.mp3" title="Listen — a reading in @jeffrey's voice">podcast</a></div></div><div class="body"> <div class="title"><a href="/aesthetic-july-4-26-essay.pdf" data-base="/aesthetic-july-4-26-essay">Aesthetic July 4 '26</a></div> <div class="detail">Essay · ~4pp · Independence Day special</div> <div class="abstract">An Independence Day special between the June and July essays, written on the Declaration's 250th anniversary. Independence is a hanging word --- in + dependere, not to hang from --- and the essay follows it in the abstract: declarations versus definitions in C and in Philadelphia, the personal computer as an independence movement the cloud quietly reversed, artists who built their own rooms (a library in a church, folk songs as open-source software, an artwork designed to scan badly), and an honest ledger of which way one small platform hangs --- a podcast hung from a host, Menuband submitted to App Store review on the holiday weekend itself, and the CNAME record as infrastructure's most truthful sentence.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">07/05</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 5 15:49</span></div> </div> </div>
<div class="p" data-paper-id="essay-july-10-26" data-no-cards="1" data-created="" data-updated="2026-07-15T20:34:39.338Z"> <div class="thumb-col"><a class="thumb" href="/aesthetic-july-10-26-essay.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-july-10-26-essay.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-podcast" href="https://assets.aesthetic.computer/podcast/aesthetic-july-10-26-essay.mp3" title="Listen — a reading in @jeffrey's voice">podcast</a></div></div><div class="body"> <div class="title"><a href="/aesthetic-july-10-26-essay.pdf" data-base="/aesthetic-july-10-26-essay">'Sup w/ July 10?</a></div> <div class="detail">Essay · ~2pp · mid-month postcard · podcast</div> <div class="abstract">A mid-month postcard from July 10th --- not the monthly essay but a check-in written because someone asked how it was going. The answer: living in two times at once. Told as three scenes: excavating Whistlegraph, an artform made years ago with a friend, now counted (963 videos transcribed, 424 songs clustered, ~1.72 billion views) and given a hand-lettered legal-pad home at whistlegraph.org; a brand-new fighting game, fight, born in two days with its rollback safety net built before its network floor; and Menuband bounced from App Store review for naming macOS in its subtitle, then let through after learning to say one word less. Also available as a spoken reading in @jeffrey's voice.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 15 13:34</span></div> </div> </div>
<div class="p" data-paper-id="holden" data-created="2026-04-05" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/potter-and-prompt-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/potter-and-prompt-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/potter-and-prompt-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/potter-and-prompt-26-arxiv.pdf" data-base="/potter-and-prompt-26-arxiv">The Potter and the Prompt</a></div> <div class="detail">John Holden's Proto-Cognitive Music Theory and Aesthetic Computer · arXiv 7pp</div> <div class="abstract">The Potter and the Prompt argues that AC independently converges on the core principles of John Holden's 1770 proto-cognitive music theory. It proposes AC as a computational laboratory for advancing Holden's unfinished program on grouping, attention, and the module.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">04/05</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="pals" data-no-cards="1" data-created="2026-07-03" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/pals-mark-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/pals-mark-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-lang" href="/pals-mark-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/pals-mark-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/pals-mark-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/pals-mark-26-arxiv-ja.pdf" title="Japanese">JA</a><a class="tl tl-lang" href="/pals-mark-26-arxiv-ru.pdf" title="Russian">RU</a></div></div><div class="body"> <div class="title"><a href="/pals-mark-26-arxiv.pdf" data-base="/pals-mark-26-arxiv">The Pals Mark</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">07/03</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="score-analysis" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/reading-the-score-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/reading-the-score-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/reading-the-score-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/reading-the-score-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/reading-the-score-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/reading-the-score-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/reading-the-score-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/reading-the-score-26-arxiv.pdf" data-base="/reading-the-score-26-arxiv">Reading the Score</a></div> <div class="detail"></div> <div class="abstract">Reading the Score looks at the graphic score as an interface for interpretation and collaboration. The paper treats notation as a computational and social object.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="essay-granularity" data-no-cards="1" data-created="2026-07-15" data-updated="2026-07-15T22:00:00.000Z"> <div class="thumb-col"><a class="thumb" href="/the-record-is-a-better-interface-essay.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/the-record-is-a-better-interface-essay.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-podcast" href="https://assets.aesthetic.computer/podcast/the-record-is-a-better-interface-essay.mp3" title="Listen — a reading in @jeffrey's voice">podcast</a></div></div><div class="body"> <div class="title"><a href="/the-record-is-a-better-interface-essay.pdf" data-base="/the-record-is-a-better-interface-essay">The Record Is a Better Interface</a></div> <div class="detail">An essay on expressive playback · podcast</div> <div class="abstract">A turntable lets a listener hold recorded sound directly, while streaming apps reduce playback to a menu of approved speeds. This essay asks why production tools remain instruments while consumer players became transport controls, and argues for audible, continuous scrubbing that gives the recording back to the hand.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">07/15</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 15 15:00</span></div> </div> </div>
<div class="p" data-paper-id="nom" data-no-cards="1" data-created="2026-06-08" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/nom-games-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/nom-games-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a></div><div class="body"> <div class="title"><a href="/nom-games-26-arxiv.pdf" data-base="/nom-games-26-arxiv">The nom Games</a></div> <div class="detail">Muncher Arcade for Aesthetic Computer · arXiv</div> <div class="abstract">The nom games rebuild MECC's Word and Number Munchers as Aesthetic Computer pieces --- numbnom, engnom, mexinom, and notenom. The paper shows how one shared engine and a reusable virtual synth controller turn each new subject or language into a content table rather than a new game, with the answer key in notenom doubling as a playable instrument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">06/08</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="fraserin" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/fraserin-essay-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/fraserin-essay-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/fraserin-essay-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/fraserin-essay-26-arxiv.pdf" data-base="/fraserin-essay-26-arxiv">A Fraserin' Art + Tech</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="comp-strats" data-created="2026-05-03" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/comp-strats-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/comp-strats-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/comp-strats-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/comp-strats-26-arxiv.pdf" data-base="/comp-strats-26-arxiv">Comp Strats</a></div> <div class="detail"></div> <div class="abstract"></div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/03</span><span class="revisions" title="Revision count">revision 3</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div> </div> </section>
<section class="cat collapsed" data-cat="audits"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Audits & Field Studies</span><span class="cat-count">5</span></div> <div class="cat-sub">Data turned back on the project itself — who uses it, what it cites, where it came from.</div> <div class="cat-list">
<div class="p" data-paper-id="archaeology" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/repo-archaeology-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/repo-archaeology-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/repo-archaeology-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/repo-archaeology-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/repo-archaeology-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/repo-archaeology-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/repo-archaeology-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/repo-archaeology-26-arxiv.pdf" data-base="/repo-archaeology-26-arxiv">Repository Archaeology</a></div> <div class="detail">Tracing the Evolution of AC Through Its Git History · arXiv 3pp · <a href="/ac-repo-archaeology">interactive timeline</a></div> <div class="abstract">Repository Archaeology traces the project through its git history. The paper shows how version control can become a narrative medium for design evolution.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="hand-and-loop" data-no-cards="1" data-created="2026-06-08" data-updated="2026-06-08T00:00:00.000Z"> <div class="thumb-col"><a class="thumb" href="/hand-and-loop-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/hand-and-loop-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a></div><div class="body"> <div class="title"><a href="/hand-and-loop-26-arxiv.pdf" data-base="/hand-and-loop-26-arxiv">The Hand and the Loop</a></div> <div class="detail">Three Eras of My Own Code: Hand-Written, GPT-Grafted, Agentic · arXiv 4pp</div> <div class="abstract">The Hand and the Loop reads AC's git history across three eras — hand-written, GPT-grafted, and fully agentic — and asks honestly whether the codebase is better off. It weighs 5x velocity and five new subsystems against the loss of instrument-like minimalism, and argues for keeping the loop in the leaves while a human hand carves the foundational libraries.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">06/08</span><span class="revisions" title="Revision count">revision 1</span><span class="updated" title="Last updated">Jun 7 17:00</span></div> </div> </div>
<div class="p" data-paper-id="network-audit" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/network-audit-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/network-audit-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/network-audit-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/network-audit-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/network-audit-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/network-audit-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/network-audit-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/network-audit-26-arxiv.pdf" data-base="/network-audit-26-arxiv">Network Audit</a></div> <div class="detail">Who Uses Aesthetic Computer and What Do They Make? · arXiv 4pp</div> <div class="abstract">Network Audit asks who uses Aesthetic Computer and what they make with it. The paper turns usage patterns into a portrait of a community in motion.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="diversity" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/citation-diversity-audit-26.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/citation-diversity-audit-26.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/citation-diversity-audit-26-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/citation-diversity-audit-26-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/citation-diversity-audit-26-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/citation-diversity-audit-26-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/citation-diversity-audit-26-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/citation-diversity-audit-26.pdf" data-base="/citation-diversity-audit-26">Citation Diversity Audit</a></div> <div class="detail">Diversity and Inclusion in AC Paper Citations · 4pp</div> <div class="abstract">Citation Diversity Audit looks at who gets cited in the papers and where the archive is thin. The paper uses citation patterns as a proxy for inclusion and intellectual range.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="open-schools" data-created="2026-03-20" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/open-schools-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/open-schools-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/open-schools-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/open-schools-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/open-schools-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/open-schools-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/open-schools-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/open-schools-26-arxiv.pdf" data-base="/open-schools-26-arxiv">Get Closed Source Out of Schools</a></div> <div class="detail"></div> <div class="abstract">Get Closed Source Out of Schools makes the case that creative computing should be teachable, inspectable, and modifiable. The paper argues for open tools as infrastructure for learning.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/20</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div> </div> </section>
<section class="cat collapsed" data-cat="dossiers"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Dossiers</span><span class="cat-count">18</span></div> <div class="cat-sub">What's publicly recoverable about art-and-tech institutions and their largest funders — fact-surfacing, not argument.</div> <div class="cat-list" data-nosort>
<div class="p" data-paper-id="rhizome" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/rhizome-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/rhizome-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/rhizome-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/rhizome-dossier-26-arxiv.pdf" data-base="/rhizome-dossier-26-arxiv">Rhizome.org — A Dossier</a></div> <div class="detail">501(c)(3) digital-arts recipient · IRS 990 pipeline · arXiv</div> <div class="abstract">What is publicly recoverable about Rhizome.org: governance, finances, and named grants reconstructed from IRS 990 filings and masthead snapshots. The dossier records the documentary record and stops where the facts run out.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="sfpc" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/sfpc-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/sfpc-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/sfpc-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/sfpc-dossier-26-arxiv.pdf" data-base="/sfpc-dossier-26-arxiv">School for Poetic Computation — A Dossier</a></div> <div class="detail">School for Poetic Computation · LLC, public finance repo · arXiv</div> <div class="abstract">What is publicly recoverable about the School for Poetic Computation: an LLC that publishes its own finances to a public GitHub repository, read alongside programs and people. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="eyebeam" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/eyebeam-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/eyebeam-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/eyebeam-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/eyebeam-dossier-26-arxiv.pdf" data-base="/eyebeam-dossier-26-arxiv">Eyebeam — A Dossier</a></div> <div class="detail">501(c)(3) art-and-technology recipient · IRS 990 pipeline · arXiv</div> <div class="abstract">What is publicly recoverable about Eyebeam: financials, governance, residencies, and named grants pulled from IRS 990 XML. The dossier surfaces the record without interpreting it.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="recurse" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/recurse-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/recurse-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/recurse-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/recurse-dossier-26-arxiv.pdf" data-base="/recurse-dossier-26-arxiv">Recurse Center — A Dossier</a></div> <div class="detail">Recurse Center · for-profit, recruiting-funded model · arXiv</div> <div class="abstract">What is publicly recoverable about the Recurse Center: a for-profit programmers' retreat funded by a recruiting model, read through founder interviews and public statements. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 3</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="internet-archive" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/internet-archive-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/internet-archive-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/internet-archive-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/internet-archive-dossier-26-arxiv.pdf" data-base="/internet-archive-dossier-26-arxiv">Internet Archive — A Dossier</a></div> <div class="detail">501(c)(3) recipient · IRS 990 + litigation track · arXiv</div> <div class="abstract">What is publicly recoverable about the Internet Archive: finances and governance from IRS 990 filings, plus a litigation track from public court records. The dossier records both and stops at the facts.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="mellon" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/mellon-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/mellon-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/mellon-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/mellon-dossier-26-arxiv.pdf" data-base="/mellon-dossier-26-arxiv">Mellon Foundation — A Dossier</a></div> <div class="detail">The funder flip · 990-PF + grants database · arXiv</div> <div class="abstract">The funder side: what is publicly recoverable about the Mellon Foundation from its 990-PF and grants database — the Form 990-PF that paid for nontrivial chunks of the other dossiers. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="pioneer-works" data-created="2026-05-02" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/pioneer-works-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/pioneer-works-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/pioneer-works-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/pioneer-works-dossier-26-arxiv.pdf" data-base="/pioneer-works-dossier-26-arxiv">Pioneer Works — A Dossier</a></div> <div class="detail">501(c)(3) recipient · founder-as-funder · arXiv</div> <div class="abstract">What is publicly recoverable about Pioneer Works: finances, governance, and a founder-as-funder structure reconstructed from IRS 990 filings and public record. The dossier surfaces the record without interpreting it.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/02</span><span class="revisions" title="Revision count">revision 4</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="new-inc" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/new-inc-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/new-inc-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/new-inc-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/new-inc-dossier-26-arxiv.pdf" data-base="/new-inc-dossier-26-arxiv">NEW INC — A Dossier</a></div> <div class="detail">Embedded in the New Museum's 990 · arXiv</div> <div class="abstract">What is publicly recoverable about NEW INC, the New Museum's incubator: finances and governance read out of the parent museum's IRS 990, where the program is embedded rather than separately filed. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="studio-museum" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/studio-museum-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/studio-museum-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/studio-museum-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/studio-museum-dossier-26-arxiv.pdf" data-base="/studio-museum-dossier-26-arxiv">Studio Museum in Harlem — A Dossier</a></div> <div class="detail">501(c)(3) recipient · capital campaign · arXiv</div> <div class="abstract">What is publicly recoverable about the Studio Museum in Harlem: finances, governance, and a capital campaign reconstructed from IRS 990 filings and public documents. The dossier records the documentary record.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="hathitrust" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/hathitrust-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/hathitrust-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/hathitrust-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/hathitrust-dossier-26-arxiv.pdf" data-base="/hathitrust-dossier-26-arxiv">HathiTrust — A Dossier</a></div> <div class="detail">UMich library service · no separate 990 · arXiv</div> <div class="abstract">What is publicly recoverable about HathiTrust: a University of Michigan library service with no separate IRS 990, surfaced instead through host-institution disclosures and public reports. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="the-kitchen" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/the-kitchen-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/the-kitchen-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/the-kitchen-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/the-kitchen-dossier-26-arxiv.pdf" data-base="/the-kitchen-dossier-26-arxiv">The Kitchen — A Dossier</a></div> <div class="detail">501(c)(3) recipient · a 50-plus-year arc · arXiv</div> <div class="abstract">What is publicly recoverable about The Kitchen: a half-century of finances and governance reconstructed from IRS 990 filings and public record across the organization's long arc. The dossier stops where the facts run out.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="machine-project" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/machine-project-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/machine-project-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/machine-project-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/machine-project-dossier-26-arxiv.pdf" data-base="/machine-project-dossier-26-arxiv">Machine Project — A Dossier</a></div> <div class="detail">501(c)(3) recipient (until 2018) · Echo Park · arXiv</div> <div class="abstract">What is publicly recoverable about Machine Project: the Echo Park space's finances and governance from IRS 990 filings through its 2018 wind-down. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="heavy-manners-library" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/heavy-manners-library-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/heavy-manners-library-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/heavy-manners-library-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/heavy-manners-library-dossier-26-arxiv.pdf" data-base="/heavy-manners-library-dossier-26-arxiv">Heavy Manners Library — A Dossier</a></div> <div class="detail">Small space · status undisclosed · arXiv</div> <div class="abstract">What is publicly recoverable about Heavy Manners Library: a small space whose legal status is undisclosed, surfaced through what little public record exists. The dossier records the gaps as part of the record.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="creative-time" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/creative-time-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/creative-time-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/creative-time-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/creative-time-dossier-26-arxiv.pdf" data-base="/creative-time-dossier-26-arxiv">Creative Time — A Dossier</a></div> <div class="detail">501(c)(3) public-art commissioner · IRS 990 pipeline · arXiv</div> <div class="abstract">What is publicly recoverable about Creative Time, the New York public-art nonprofit (1974–): structure, programs, people, and money from the IRS 990 series and its program archive. Scaffold revision — figures pending the data pass; fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="creative-capital" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/creative-capital-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/creative-capital-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/creative-capital-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/creative-capital-dossier-26-arxiv.pdf" data-base="/creative-capital-dossier-26-arxiv">Creative Capital — A Dossier</a></div> <div class="detail">501(c)(3) artist-grant funder · 990 + grantee record · arXiv</div> <div class="abstract">What is publicly recoverable about Creative Capital, the New York nonprofit (1999–) that regrants to individual artists: structure, the award, people, and money from the IRS 990 series and the public grantee record. Scaffold revision — figures pending; fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="microvision" data-created="2026-05-04" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/microvision-dossier-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/microvision-dossier-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/microvision-dossier-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/microvision-dossier-26-arxiv.pdf" data-base="/microvision-dossier-26-arxiv">MicroVision — A Dossier</a></div> <div class="detail">The public-company flip · SEC EDGAR + 11-year archive · arXiv</div> <div class="abstract">The public-company side: what is publicly recoverable about MicroVision (NASDAQ: MVIS) from SEC EDGAR and an eleven-year family archive of filings. Fact-surfacing, not argument.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/04</span><span class="revisions" title="Revision count">revision 3</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="calarts-news" data-created="2026-05-18" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/whats-new-calarts-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/whats-new-calarts-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/whats-new-calarts-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a></div></div><div class="body"> <div class="title"><a href="/whats-new-calarts-26-arxiv.pdf" data-base="/whats-new-calarts-26-arxiv">What's New CalArts!? — A Dossier</a></div> <div class="detail">CalArts · a dossier in news format · arXiv</div> <div class="abstract">What's New CalArts!? surfaces what is publicly recoverable about CalArts in a news-format dossier: programs, finances, and governance from public documents. The dossier records the record and stops at the facts.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">05/18</span><span class="revisions" title="Revision count">revision 2</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div>
<div class="p" data-paper-id="ucla-arts" data-created="2026-03-27" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/ucla-arts-funding-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/ucla-arts-funding-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/ucla-arts-funding-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/ucla-arts-funding-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/ucla-arts-funding-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/ucla-arts-funding-26-arxiv-zh.pdf" title="Chinese">ZH</a></div></div><div class="body"> <div class="title"><a href="/ucla-arts-funding-26-arxiv.pdf" data-base="/ucla-arts-funding-26-arxiv">Two Departments, One Building</a></div> <div class="detail"></div> <div class="abstract">Two Departments, One Building examines how funding and infrastructure shape creative work in shared spaces. The paper looks at administrative boundaries as part of the artistic system.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/27</span><span class="revisions" title="Revision count">revision 5</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div> </div> </section>
<section class="cat collapsed" data-cat="software"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Software Papers</span><span class="cat-count">3</span></div> <div class="cat-sub">Conventional software-paper summaries, for archival and citation.</div> <div class="cat-list">
<div class="p" data-paper-id="els"> <a class="thumb" href="/kidlisp-els-2026.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/kidlisp-els-2026.jpg" alt="" loading="lazy" decoding="async"></a><div class="body"> <div class="title"><a href="/kidlisp-els-2026.pdf">KidLisp (ELS 2026)</a></div> <div class="detail">A Minimal Lisp for Generative Art with Social Composition · ELS ACM SIGS 4pp</div> <div class="abstract">An ELS conference version of KidLisp that emphasizes social composition. It positions the language as a shared practice rather than a solo scripting environment.</div> <div class="meta-row"><span class="created" title="Created"></span><span class="revisions" title="Revisions"></span><span class="updated" title="Last updated">Jul 15 13:34</span></div> </div> </div>
<div class="p" data-paper-id="joss-kidlisp"> <a class="thumb" href="/kidlisp-26-joss.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/kidlisp-26-joss.jpg" alt="" loading="lazy" decoding="async"></a><div class="body"> <div class="title"><a href="/kidlisp-26-joss.pdf">KidLisp '26</a></div> <div class="detail">JOSS Summary · 3pp</div> <div class="abstract">A compact JOSS summary of KidLisp for archival and citation purposes. It frames the language as a small but expressive tool for generative art.</div> <div class="meta-row"><span class="created" title="Created"></span><span class="revisions" title="Revisions"></span><span class="updated" title="Last updated">Jul 15 13:34</span></div> </div> </div>
<div class="p" data-paper-id="joss-ac"> <a class="thumb" href="/aesthetic-computer-26-joss.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/aesthetic-computer-26-joss.jpg" alt="" loading="lazy" decoding="async"></a><div class="body"> <div class="title"><a href="/aesthetic-computer-26-joss.pdf">Aesthetic Computer '26</a></div> <div class="detail">JOSS Summary · 2pp</div> <div class="abstract">A compact JOSS summary of Aesthetic Computer for archival and citation purposes. It distills the platform into a conventional software paper format.</div> <div class="meta-row"><span class="created" title="Created"></span><span class="revisions" title="Revisions"></span><span class="updated" title="Last updated">Jul 15 13:34</span></div> </div> </div> </div> </section>
<section class="cat cat--archive collapsed" data-cat="archive"> <div class="cat-head" role="button" tabindex="0" aria-expanded="false"><span class="cat-chevron" aria-hidden="true">▾</span><span class="cat-name">Archive</span><span class="cat-count">1</span></div> <div class="cat-sub">Deprecated — kept for the record, no longer actively maintained.</div> <div class="cat-list" data-nosort>
<div class="p" data-paper-id="calarts" data-deprecated="1" data-created="2026-03-21" data-updated="2026-07-03T07:57:35.155Z"> <div class="thumb-col"><a class="thumb" href="/calarts-callouts-papers-26-arxiv.pdf" tabindex="-1" aria-hidden="true"><img src="/thumbs/calarts-callouts-papers-26-arxiv.jpg" alt="" loading="lazy" decoding="async"></a><div class="thumb-links"><a class="tl tl-cards" href="/calarts-callouts-papers-26-arxiv-cards.pdf" title="Mobile-friendly cards format">cards</a><a class="tl tl-lang" href="/calarts-callouts-papers-26-arxiv-da.pdf" title="Danish">DA</a><a class="tl tl-lang" href="/calarts-callouts-papers-26-arxiv-es.pdf" title="Spanish">ES</a><a class="tl tl-lang" href="/calarts-callouts-papers-26-arxiv-zh.pdf" title="Chinese">ZH</a><a class="tl tl-lang" href="/calarts-callouts-papers-26-arxiv-ja.pdf" title="Japanese">JA</a></div></div><div class="body"> <div class="title"><a href="/calarts-callouts-papers-26-arxiv.pdf" data-base="/calarts-callouts-papers-26-arxiv">CalArts, Callouts, and Papers</a></div> <div class="detail"></div> <div class="abstract">CalArts, Callouts, and Papers turns a local institutional context into a study of friction, attention, and production. The paper leans into psycho style to show how academic labor is staged and performed.</div> <div class="meta-row"><span class="author">@jeffrey</span><span class="created" title="Created">03/21</span><span class="revisions" title="Revision count">revision 6</span><span class="updated" title="Last updated">Jul 3 00:57</span></div> </div> </div> </div> </section>
<!-- papers-end --> </div>
<!-- guest-start --> <!-- guest-end -->
<div class="colophon"> <p>By <a href="https://prompt.ac/@jeffrey">@jeffrey</a>. <a href="/feed.xml" title="Atom feed">feed</a>.</p> </div>
<div class="footer"> <span><a href="https://aesthetic.computer">aesthetic.computer</a> · <a href="/platter">platter</a> · <a href="https://github.com/whistlegraph/aesthetic-computer/tree/main/papers">source</a> · <button onclick="toggleTheme()">theme</button></span> </div>
<script> // === Hero Ken Burns slideshow (canvas, modeled after give.aesthetic.computer) === (function initHeroSlideshow() { const canvas = document.getElementById('heroCanvas'); if (!canvas) return; const ctx = canvas.getContext('2d'); const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// focal: normalized (0-1) image-space anchor that stays centered on screen // v5 = library reading room — six AC freaks at oak table, faces band mid-frame // v6 = town-square news stand — kiosk handoff left-of-center, steps reader right // v7 = elementary classroom — kids + teacher around the music room // v8 = field jam session — meadow horseshoe with notepats + papers // w1 = portrait: kid hands jeffrey a paper they wrote (faces upper-mid) // w2 = portrait: mid-life pro shows jeffrey her Surface (faces upper-mid) // w3 = portrait: elder shows jeffrey her PowerBook on the porch // pan.s = zoom multiplier on top of cover baseline (1.0 = bare cover) const SLIDES = [ { src: '/papers-header-v5.png', focal: { x: 0.50, y: 0.45 }, pan: { from: { s: 1.00, x: 0, y: 0 }, to: { s: 1.08, x: -0.01, y: 0.01 } } }, { src: '/papers-header-w1.png', focal: { x: 0.50, y: 0.38 }, pan: { from: { s: 1.04, x: 0, y: 0 }, to: { s: 1.10, x: 0.01, y: 0.01 } } }, { src: '/papers-header-v6.png', focal: { x: 0.45, y: 0.50 }, pan: { from: { s: 1.06, x: 0, y: 0 }, to: { s: 1.00, x: 0.02, y: -0.01 } } }, { src: '/papers-header-w2.png', focal: { x: 0.50, y: 0.38 }, pan: { from: { s: 1.00, x: 0, y: 0 }, to: { s: 1.08, x: -0.01, y: 0.01 } } }, { src: '/papers-header-v7.png', focal: { x: 0.50, y: 0.42 }, pan: { from: { s: 1.04, x: 0, y: 0 }, to: { s: 1.10, x: -0.01, y: 0.01 } } }, { src: '/papers-header-w3.png', focal: { x: 0.50, y: 0.40 }, pan: { from: { s: 1.06, x: 0, y: 0 }, to: { s: 1.00, x: 0.01, y: -0.01 } } }, { src: '/papers-header-v8.png', focal: { x: 0.50, y: 0.55 }, pan: { from: { s: 1.00, x: 0, y: 0 }, to: { s: 1.10, x: 0.00, y: -0.02 } } }, ]; const SLIDE_DUR = 7000; const FADE_DUR = 1800; const IMG_FADE_IN = 900; // per-image dissolve once it loads const CYCLE = SLIDES.length * SLIDE_DUR;
const images = SLIDES.map(s => { const i = new Image(); i._loadedAt = 0; const stamp = () => { if (!i._loadedAt) i._loadedAt = performance.now(); }; i.addEventListener('load', stamp, { once: true }); i.addEventListener('error', stamp, { once: true }); i.src = s.src; if (i.complete && i.naturalWidth) i._loadedAt = performance.now(); return i; });
let cssW = 0, cssH = 0; function resize() { const rect = canvas.getBoundingClientRect(); cssW = rect.width; cssH = rect.height; const dpr = window.devicePixelRatio || 1; canvas.width = Math.max(1, Math.round(cssW * dpr)); canvas.height = Math.max(1, Math.round(cssH * dpr)); ctx.setTransform(dpr, 0, 0, dpr, 0, 0); } resize(); window.addEventListener('resize', resize, { passive: true });
function easeInOutSine(t) { return -(Math.cos(Math.PI * t) - 1) / 2; }
// Cover-fill the canvas with a single image; focal anchor keeps // the subject centered as the slow Ken Burns pan zooms in/out. // // Coverage invariant: the canvas must NEVER show empty margin on // any edge, even at the wide end of the pan. Two guarantees: // 1. baseScale carries 5% overscan so sc=1.0 + small translate // still has room before the image edge clears the canvas. // 2. dx/dy are clamped so a stray translate value can never // shift the image past a canvas edge. const COVER_OVERSCAN = 1.05; function drawSlide(img, focal, pan, progress, alpha) { if (!img.complete || !img.naturalWidth) return; const t = easeInOutSine(progress); const sc = pan.from.s + (pan.to.s - pan.from.s) * t; const tx = pan.from.x + (pan.to.x - pan.from.x) * t; const ty = pan.from.y + (pan.to.y - pan.from.y) * t; const baseScale = Math.max(cssW / img.naturalWidth, cssH / img.naturalHeight) * COVER_OVERSCAN; const scale = baseScale * sc; const dw = img.naturalWidth * scale; const dh = img.naturalHeight * scale; let dx = (cssW / 2) - (img.naturalWidth * focal.x * scale) + tx * cssW; let dy = (cssH / 2) - (img.naturalHeight * focal.y * scale) + ty * cssH; // Clamp so the image always covers the entire canvas. dw/dh // are guaranteed >= cssW/cssH because baseScale is the cover // fit times 1.05, so the clamp range is non-empty. dx = Math.min(0, Math.max(cssW - dw, dx)); dy = Math.min(0, Math.max(cssH - dh, dy)); ctx.save(); ctx.globalAlpha = alpha; ctx.drawImage(img, dx, dy, dw, dh); ctx.restore(); }
// Per-image fade-in so a slide that finishes loading mid-cycle // ramps from 0→1 over IMG_FADE_IN ms instead of popping at full // alpha the first frame after load. function imgAlpha(img, now) { if (!img._loadedAt) return 0; const t = (now - img._loadedAt) / IMG_FADE_IN; return Math.min(1, Math.max(0, t)); }
let start = 0; let lastFrame = 0; function frame(now) { if (cssW === 0 || cssH === 0) { resize(); } ctx.clearRect(0, 0, cssW, cssH);
const elapsed = reduced ? 0 : (now - start); const cyclePos = ((elapsed % CYCLE) + CYCLE) % CYCLE; const idx = Math.floor(cyclePos / SLIDE_DUR); const slideElapsed = cyclePos - idx * SLIDE_DUR; const slideProg = slideElapsed / SLIDE_DUR; const fadeStartProg = (SLIDE_DUR - FADE_DUR) / SLIDE_DUR;
if (slideProg > fadeStartProg) { // End of the slot — crossfade current → next. const fadeT = (slideProg - fadeStartProg) / (1 - fadeStartProg); const nextIdx = (idx + 1) % SLIDES.length; const nextImg = images[nextIdx]; const curImg = images[idx]; drawSlide(nextImg, SLIDES[nextIdx].focal, SLIDES[nextIdx].pan, 0, imgAlpha(nextImg, now)); drawSlide(curImg, SLIDES[idx].focal, SLIDES[idx].pan, slideProg, (1 - fadeT) * imgAlpha(curImg, now)); } else { // Holding on the current slide — single image fills the canvas. const curImg = images[idx]; drawSlide(curImg, SLIDES[idx].focal, SLIDES[idx].pan, slideProg, imgAlpha(curImg, now)); }
if (!reduced || lastFrame === 0) requestAnimationFrame(frame); lastFrame = now; }
// Kick the loop on the FIRST decoded image so something appears // ASAP; later slides ride in on imgAlpha when they finish loading. let kicked = false; function kick() { if (kicked) return; kicked = true; start = performance.now(); // Paint one frame so the canvas has real pixels before the // CSS opacity ramp begins — this prevents the perception of // a global "fade-in pop" from empty purple to content. frame(start); requestAnimationFrame(() => { canvas.classList.add('loaded'); requestAnimationFrame(frame); }); } images.forEach(img => { if (img.complete && img.naturalWidth) kick(); else img.addEventListener('load', kick, { once: true }); }); // Safety fallback — if all loads stall, still kick after 4s. setTimeout(kick, 4000); })();
// Cache-bust version — updated by papermill deploy window.__papersVersion = '20260328';
// Relative timestamps function relativeTime(iso) { const diff = Date.now() - new Date(iso).getTime(); const mins = Math.floor(diff / 60000); if (mins < 1) return 'Updated just now'; if (mins < 60) return 'Updated ' + mins + 'm ago'; const hrs = Math.floor(mins / 60); if (hrs < 24) return 'Updated ' + hrs + 'h ago'; const days = Math.floor(hrs / 24); if (days === 1) return 'Updated yesterday'; if (days < 30) return 'Updated ' + days + ' days ago'; const months = Math.floor(days / 30); return 'Updated ' + months + ' month' + (months > 1 ? 's' : '') + ' ago'; } document.querySelectorAll('.updated[data-time]').forEach(el => { el.textContent = relativeTime(el.dataset.time); });
// Translations fetched from translations.json (regenerate via: node papers/papermill.mjs sync-index) let translations = {}; const translationsReady = fetch("/translations.json?v=" + window.__papersVersion) .then(r => r.ok ? r.json() : {}) .then(j => { translations = j || {}; return translations; }) .catch(() => ({}));
// Store original English text on first load document.querySelectorAll('.p[data-paper-id]').forEach(el => { const titleA = el.querySelector('.title a'); const detail = el.querySelector('.detail'); if (titleA) el.dataset.titleEn = titleA.textContent; if (detail) el.dataset.detailEn = detail.innerHTML; });
// Language switcher const langs = { en: { flag: 'us', name: 'English' }, da: { flag: 'dk', name: 'Dansk' }, es: { flag: 'es', name: 'Espa\u00f1ol' }, zh: { flag: 'cn', name: '\u4e2d\u6587' }, ja: { flag: 'jp', name: '\u65e5\u672c\u8a9e' } }; let currentLang = 'en';
// Split detail into [subtitle, suffix] at the first middot \u2014 the suffix // (e.g. "\u00b7 arXiv 5pp" or "\u00b7 <a href=...>timeline</a>") is language-agnostic // and gets re-appended to translated subtitles. innerHTML decodes · // to U+00B7, so match either form. function splitDetail(html) { if (!html) return ['', '']; const m = html.match(/(?:·|\u00b7)/); if (!m) return [html.trim(), '']; const idx = m.index; return [html.slice(0, idx).trim(), html.slice(idx).trim()]; }
const selector = document.getElementById('langSelector'); const flagEl = document.getElementById('lang-flag'); const textEl = document.getElementById('lang-text');
selector.addEventListener('click', (e) => { if (e.target.closest('.lang-option')) { const opt = e.target.closest('.lang-option'); setLang(opt.dataset.lang); selector.classList.remove('open'); } else { selector.classList.toggle('open'); } });
document.addEventListener('click', (e) => { if (!selector.contains(e.target)) selector.classList.remove('open'); });
function setLang(lang) { currentLang = lang; const info = langs[lang]; flagEl.className = 'lang-flag fi fi-' + info.flag; textEl.textContent = info.name;
document.querySelectorAll('.lang-option').forEach(o => { o.classList.toggle('active', o.dataset.lang === lang); });
// Update PDF URLs (cache-bust with build version) const suffix = lang === 'en' ? '' : '-' + lang; document.querySelectorAll('.p .title a[data-base]').forEach(a => { a.href = a.dataset.base + suffix + '.pdf?v=' + window.__papersVersion; // Add/update language badge let badge = a.querySelector('.lang-badge'); if (!badge) { badge = document.createElement('span'); badge.className = 'lang-badge'; a.appendChild(badge); } badge.textContent = lang === 'en' ? '' : info.name; badge.classList.toggle('visible', lang !== 'en'); });
// Swap titles and details document.querySelectorAll('.p[data-paper-id]').forEach(el => { const id = el.dataset.paperId; const titleA = el.querySelector('.title a'); const detail = el.querySelector('.detail'); if (!titleA || !detail) return;
if (lang === 'en') { titleA.childNodes[0].textContent = el.dataset.titleEn; detail.innerHTML = el.dataset.detailEn; return; }
const t = translations[id] && translations[id][lang]; if (!t) { // No translation available — fall back to English content titleA.childNodes[0].textContent = el.dataset.titleEn; detail.innerHTML = el.dataset.detailEn; return; }
if (t.title) titleA.childNodes[0].textContent = t.title;
// Translate the subtitle but keep the format/link suffix from English const [, suffix] = splitDetail(el.dataset.detailEn); if (t.subtitle) { detail.innerHTML = suffix ? t.subtitle + ' ' + suffix : t.subtitle; } else if (suffix) { detail.innerHTML = suffix.replace(/^(?:·|·)\s*/, ''); } }); }
// Read language from URL path (/da, /es, /zh|/cn, /ja|/jp) or query param (?lang=da) const cleanPath = location.pathname.replace(/\/+$/, ''); const pathLang = { '/da': 'da', '/es': 'es', '/cn': 'zh', '/en': 'en', '/zh': 'zh', '/ja': 'ja', '/jp': 'ja' }[cleanPath]; const paramLang = new URLSearchParams(location.search).get('lang'); const initLang = pathLang || paramLang; if (initLang && langs[initLang] && initLang !== 'en') { // Wait for the JSON before swapping so non-English titles render correctly translationsReady.then(() => setLang(initLang)); }
// SVG icon templates const pageSvg = (color) => `<svg width="16" height="20" viewBox="0 0 16 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M2 1h8l4 4v13a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1z" stroke="${color}" stroke-width="1.2" fill="none"/> <path d="M10 1v4h4" stroke="${color}" stroke-width="1.2" fill="none"/> <line x1="4" y1="9" x2="12" y2="9" stroke="${color}" stroke-width="0.8" opacity="0.4"/> <line x1="4" y1="12" x2="12" y2="12" stroke="${color}" stroke-width="0.8" opacity="0.4"/> <line x1="4" y1="15" x2="9" y2="15" stroke="${color}" stroke-width="0.8" opacity="0.4"/> </svg>`;
const cardsSvg = (color) => `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect class="card-back" x="4" y="1" width="12" height="15" rx="2" stroke="${color}" stroke-width="1" opacity="0.35" fill="none"/> <rect class="card-back" x="2" y="3" width="12" height="15" rx="2" stroke="${color}" stroke-width="1" opacity="0.55" fill="none"/> <rect x="0" y="5" width="12" height="15" rx="2" stroke="${color}" stroke-width="1.2" fill="none"/> <line x1="3" y1="10" x2="9" y2="10" stroke="${color}" stroke-width="0.8" opacity="0.5"/> <line x1="3" y1="13" x2="7" y2="13" stroke="${color}" stroke-width="0.8" opacity="0.5"/> </svg>`;
// Add format icons (PDF page + cards stack) to each paper document.querySelectorAll('.p .title a[data-base]').forEach(a => { const base = a.dataset.base; const kb = a.dataset.size || ''; const p = a.closest('.p'); const titleDiv = p.querySelector('.title'); const noCards = p.dataset.noCards === '1';
const icons = document.createElement('span'); icons.className = 'format-icons';
// PDF page icon const pdfLink = document.createElement('a'); pdfLink.href = a.href; pdfLink.className = 'fmt-icon pdf-icon'; pdfLink.title = 'PDF (' + kb + 'KB)'; pdfLink.innerHTML = pageSvg('var(--cyan)'.replace('var(--cyan)', getComputedStyle(document.documentElement).getPropertyValue('--cyan').trim() || '#4ecdc4')); if (kb) { const label = document.createElement('span'); label.className = 'fmt-label'; label.textContent = kb + 'K'; pdfLink.appendChild(label); } icons.appendChild(pdfLink);
// Cards + translation links now live under the illustration // (.thumb-links), rendered server-side in cli.mjs renderPaper().
titleDiv.appendChild(icons); });
// For papers without data-base (JOSS, ELS) just add PDF icon document.querySelectorAll('.p .title a:not([data-base])[data-size]').forEach(a => { const kb = a.dataset.size || ''; const titleDiv = a.closest('.title'); const icons = document.createElement('span'); icons.className = 'format-icons'; const pdfLink = document.createElement('a'); pdfLink.href = a.href; pdfLink.className = 'fmt-icon pdf-icon'; pdfLink.title = 'PDF (' + kb + 'KB)'; pdfLink.innerHTML = pageSvg(getComputedStyle(document.documentElement).getPropertyValue('--cyan').trim() || '#4ecdc4'); if (kb) { const label = document.createElement('span'); label.className = 'fmt-label'; label.textContent = kb + 'K'; pdfLink.appendChild(label); } icons.appendChild(pdfLink); titleDiv.appendChild(icons); });
// Bust cache on initial PDF links document.querySelectorAll('.p .title a[data-base]').forEach(a => { if (!a.href.includes('?v=')) a.href += '?v=' + window.__papersVersion; });
// PSYCHO papers: add class, split title into per-character color-cycling spans document.querySelectorAll('.p[data-psycho="1"]').forEach(p => { p.classList.add('psycho'); const titleA = p.querySelector('.title a'); if (!titleA) return; const text = titleA.childNodes[0]?.textContent || titleA.textContent; // Preserve other children (lang badges, format icons) const otherNodes = Array.from(titleA.childNodes).slice(1); titleA.textContent = ''; for (let i = 0; i < text.length; i++) { const ch = text[i]; if (ch === ' ') { titleA.appendChild(document.createTextNode(' ')); } else { const span = document.createElement('span'); span.className = 'psycho-char'; span.textContent = ch; span.style.animationDelay = (i * 0.15) + 's, ' + (i * 0.08) + 's'; titleA.appendChild(span); } } otherNodes.forEach(n => titleA.appendChild(n)); });
// Make whole paper block clickable document.querySelectorAll('.p').forEach(p => { p.addEventListener('click', (e) => { // Don't hijack clicks on actual links (cards, interactive timeline, etc.) if (e.target.closest('a')) return; const link = p.querySelector('.title a'); if (link) link.click(); }); });
// Track paper PDF views/downloads function trackHit(paper, format) { const lang = currentLang || 'en'; navigator.sendBeacon( 'https://aesthetic.computer/api/paper-hit', JSON.stringify({ paper, format, lang }) ); } document.querySelectorAll('.p').forEach(p => { const id = p.dataset.paperId; if (!id) return; p.querySelectorAll('a[href$=".pdf"], a[href*=".pdf?"]').forEach(a => { const fmt = a.href.includes('-cards') ? 'cards' : 'pdf'; a.addEventListener('click', () => trackHit(id, fmt)); }); });
// === SORTING === let hitTotals = {}; const papersList = document.querySelector('.papers-list'); // Curated (importance) section order, captured for the "top hits" view. const origSectionOrder = papersList ? [...papersList.querySelectorAll(':scope > section.cat')] : [];
// Freshness score: the most recent of "last edited" (updated) and // "made" (created), in ms. Newer sorts higher. function freshOf(el) { const u = el.dataset.updated ? Date.parse(el.dataset.updated) || 0 : 0; const c = el.dataset.created ? Date.parse(el.dataset.created) || 0 : 0; return Math.max(u, c); } function paperKey(el, mode) { if (mode === 'hits') return hitTotals[el.dataset.paperId] || 0; if (mode === 'created') return Date.parse(el.dataset.created) || 0; if (mode === 'updated') return Date.parse(el.dataset.updated) || 0; return freshOf(el); // 'fresh' } function activeSort() { const b = document.querySelector('.sort-btn.active'); return b ? b.dataset.sort : 'fresh'; }
// Sort papers within each category, and — for recency modes — float // whole category sections so the one holding the freshest paper rises // to the top of the page. Lists flagged [data-nosort] keep their // internal curated order, but their section still floats by its // freshest member. "top hits" restores the curated section order. function sortPapers(mode) { document.querySelectorAll('.cat-list:not([data-nosort])').forEach(list => { const papers = [...list.children].filter(el => el.classList.contains('p')); papers.sort((a, b) => paperKey(b, mode) - paperKey(a, mode)); for (const p of papers) list.appendChild(p); }); if (!papersList) return; if (mode === 'hits') { for (const s of origSectionOrder) papersList.appendChild(s); } else { const secScore = sec => { const ps = [...sec.querySelectorAll('.p')]; return ps.length ? Math.max(...ps.map(p => paperKey(p, mode))) : 0; }; const secs = [...papersList.querySelectorAll(':scope > section.cat')]; secs.sort((a, b) => secScore(b) - secScore(a)); for (const s of secs) papersList.appendChild(s); } }
// Sort bar clicks document.querySelectorAll('.sort-btn').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.sort-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); sortPapers(btn.dataset.sort); }); });
// Default view: freshest first (runs before hit counts arrive). sortPapers('fresh');
// Collapsible categories — every section starts folded; clicking (or // Enter/Space on) a header opens it, and the set of OPEN categories // persists in localStorage. (function initCollapse() { const KEY = 'papers-open-cats'; let open; try { open = new Set(JSON.parse(localStorage.getItem(KEY) || '[]')); } catch { open = new Set(); } // First-time visitors: open the freshest (now first) section so the // most recent work is visible without a click. Returning visitors // keep whatever they last had open. if (open.size === 0) { const first = document.querySelector('.papers-list section.cat'); if (first && first.dataset.cat) open.add(first.dataset.cat); } const save = () => { try { localStorage.setItem(KEY, JSON.stringify([...open])); } catch {} }; document.querySelectorAll('.cat').forEach(cat => { const key = cat.dataset.cat; const head = cat.querySelector('.cat-head'); if (!head) return; if (open.has(key)) { cat.classList.remove('collapsed'); head.setAttribute('aria-expanded', 'true'); } const toggle = () => { const nowClosed = cat.classList.toggle('collapsed'); head.setAttribute('aria-expanded', String(!nowClosed)); if (nowClosed) open.delete(key); else open.add(key); save(); }; head.addEventListener('click', toggle); head.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggle(); } }); }); })();
// Fetch hit counts, inject into meta rows, then apply default sort (async () => { try { const res = await fetch('https://aesthetic.computer/api/paper-hit'); if (!res.ok) return; const { stats } = await res.json(); for (const s of stats) { const id = s._id.paper; hitTotals[id] = (hitTotals[id] || 0) + s.count; } for (const p of document.querySelectorAll('.p')) { const id = p.dataset.paperId; const count = hitTotals[id] || 0; const metaRow = p.querySelector('.meta-row'); if (metaRow && count > 0) { const span = document.createElement('span'); span.className = 'hits'; span.title = 'Views'; span.textContent = count + ' view' + (count !== 1 ? 's' : ''); metaRow.prepend(span); } } // Re-apply whatever sort is active (default: freshest). sortPapers(activeSort()); } catch {} })();
// === BUILD TELEMETRY (thin top progress bar only) === const OVEN = 'https://oven.aesthetic.computer'; const buildBar = document.getElementById('buildBar');
function setBar(pct, state) { if (!buildBar) return; buildBar.style.width = Math.max(0, Math.min(100, pct)) + '%'; buildBar.classList.toggle('active', state === 'active'); buildBar.classList.toggle('done', state === 'done'); buildBar.classList.toggle('fail', state === 'fail'); }
function clearBar() { if (!buildBar) return; buildBar.classList.remove('active', 'done', 'fail'); buildBar.style.width = '0%'; }
function connectBuildStream(jobId) { setBar(2, 'active'); const src = new EventSource(`${OVEN}/papers-build/${jobId}/stream`);
src.addEventListener('status', (e) => { try { const d = JSON.parse(e.data); setBar(Math.round(d.percent || 0), 'active'); } catch {} });
src.addEventListener('complete', (e) => { try { const d = JSON.parse(e.data); const ok = d.status === 'success'; setBar(100, ok ? 'done' : 'fail'); if (ok) setTimeout(() => location.reload(), 3000); else setTimeout(clearBar, 4000); } catch {} src.close(); });
src.onerror = () => { src.close(); clearBar(); setTimeout(pollOven, 30000); }; }
async function pollOven() { try { const res = await fetch(`${OVEN}/papers-build`, { signal: AbortSignal.timeout(5000) }); if (!res.ok) return; const data = await res.json(); const active = data.active || data.current; if (active && (active.status === 'running' || active.status === 'pending')) { connectBuildStream(active.id); } else { clearBar(); setTimeout(pollOven, 60000); } } catch { setTimeout(pollOven, 60000); } }
pollOven();
// Theme toggle function toggleTheme() { const r = document.documentElement; if (r.classList.contains('light-mode')) { r.classList.replace('light-mode', 'dark-mode'); } else if (r.classList.contains('dark-mode')) { r.classList.replace('dark-mode', 'light-mode'); } else { r.classList.add(matchMedia('(prefers-color-scheme:dark)').matches ? 'light-mode' : 'dark-mode'); } }
// Active proposals — pinned strip at top of papers index. // Mirror of the active section in /deadlines, sorted by closest deadline. const ACTIVE_PROPOSALS = [ { title: 'The AC Papermill', venue: 'Printed Matter — NY Art Book Fair · Project Space', deadline: '2026-05-08', url: 'https://aesthetic.computer/printed-matter-2026', }, { title: 'Menuband Jam · NELA Computer Club', venue: 'CultureHub @ La MaMa · NYC Residency', deadline: '2026-05-20', url: 'https://aesthetic.computer/culture-hub-2026', }, ];
(function renderActiveProposals() { const list = document.getElementById('apList'); const container = document.getElementById('activeProposals'); if (!list || !container) return;
const today = new Date(); today.setHours(0, 0, 0, 0); const items = ACTIVE_PROPOSALS .map(p => ({ ...p, target: new Date(p.deadline + 'T23:59:59Z') })) .filter(p => p.target.getTime() >= today.getTime() - 86400000) .sort((a, b) => a.target - b.target);
if (items.length === 0) { container.style.display = 'none'; return; }
list.innerHTML = items.map(p => { const days = Math.round((p.target - today) / 86400000); let cls = 'ok', label = `${days}d`; if (days < 0) { cls = 'passed'; label = `${-days}d ago`; } else if (days === 0) { cls = 'urgent'; label = 'today'; } else if (days <= 7) { cls = 'urgent'; label = `${days}d`; } else if (days <= 30) { cls = 'soon'; label = `${days}d`; } const dateStr = p.target.toLocaleDateString('en-US', { month: 'short', day: 'numeric', timeZone: 'UTC' }); return `<a class="ap-card" href="${p.url}"> <div class="ap-title">${p.title}</div> <div class="ap-venue">${p.venue}</div> <div class="ap-meta"> <span class="ap-countdown ${cls}">${label}</span> <span class="ap-deadline">due ${dateStr}</span> </div> </a>`; }).join(''); })(); </script></body></html>