Skip to content

Repository files navigation

Deets.Solutions

Status: live at deets.solutions · Platform: static site on Cloudflare Pages — no framework, no build step, no dependencies

My personal website — a hand-built static site. Plain HTML/CSS/JS: no framework, no build step, no runtime dependencies. It doubles as a hub for recruiters (portfolio + resume) and for friends (the journals).

The home page is that hub: a header bar with name and Resume / GitHub / LinkedIn links over live section cards that show each tab's count and latest entry.

The tabs

  • SOTD — a Song-of-the-Day journal, scraped from a Discord channel by DeetsOTD and rendered as a sortable, filterable, searchable card grid with album art and 30-second previews.
  • Movies — my Letterboxd film log: posters, star ratings, likes, rewatches, and reviews, with the same controls. Rewatches can be grouped per film or fanned out one card per sitting.
  • DeetsRadio — shared listening rooms: one person plays, everyone hears it in sync, with a queue, chat, and browsing the rest of the site while the room keeps playing. Live against a Cloudflare Worker; ?mock is the dev opt-out. See docs/radio.md.
  • League — live League of Legends stats for me and friends, served by the DeetsLeague Cloudflare Worker (Riot API proxy + match database). The only tab that calls an API at runtime; champion and augment art comes from Riot's public CDNs.
  • DeetsCities — a real-time hex-settlement board game in the spirit of the classic (no trademarks anywhere), 3–6 players around a shared table plus spectators. Live multiplayer against a Cloudflare Worker; cities/?mock still runs the real rules engine in-page against bot seats as a dev tool. Desktop only. See docs/cities.md.
  • DeetsMahjong — Hong Kong mahjong, locked to four seats, with seating dice, a wall-break roll, claim windows, and HK half-spread faan scoring. Live multiplayer against a Cloudflare Worker; mahjong/?mock still runs the real rules engine in-page against bot seats as a dev tool. Desktop only. See docs/mahjong.md.
  • DeetsPoker — no-limit Texas hold'em as a cash game, 2–12 seats: fixed buy-in, real chip denominations at the betting line, side pots, busts and re-buys, sit-outs that keep your stack on the felt, and host-added bots in three difficulty tiers. Live multiplayer against a Cloudflare Worker; poker/?mock runs the same rules engine in-page as a dev tool. See docs/poker.md.
  • Cool Stuff I Did — a portfolio of projects, hand-written cards.
  • Resume — the resume rendered in the site's design system, with a downloadable one-page PDF that is printed from the page itself.

Appearance

Every page has a two-axis appearance system, picked from the Vibe menu in the header and remembered per visitor:

  • Theme (color): Lilac, Green, Sepia, Moonlight, Black & Yellow, Black & Red
  • Skin (shape, type, motion): Vanilla, Press, Ocean, Glass, Retro-Future

Any theme pairs with any skin — 30 combinations, driven entirely by CSS tokens. Nothing in the site's styles hardcodes a color or a geometry value.

First visits (no saved choice) follow the OS light/dark preference on both axes, landing on Press × Lilac in light or Retro-Future × Black & Red in dark.

Structure

index.html            home hub (hero bar + live section cards via js/home.js)
sotd/                 Song of the Day (page + generated songs.json)
movies/               Movie log (page + generated movies.json)
radio/                DeetsRadio listening rooms (talks to the DeetsRadio worker)
league/               League of Legends stats (talks to the DeetsLeague worker)
games/                the shared game foundation (table shell, transport,
                      seat colors, the worker's DO base) — docs/games.md
cities/               DeetsCities board game (talks to the DeetsCities worker)
mahjong/              DeetsMahjong (talks to the DeetsMahjong worker)
poker/                DeetsPoker (worker in the sibling ../DeetsPoker repo)
profile/              your account's home — name + color (docs/accounts.md)
auth/                 sign-in landing pad (talks to the DeetsAccounts worker)
privacy/              privacy policy (the OAuth consent screen links here)
cool-stuff/           project portfolio
resume/               resume page + downloadable PDF (generated, see below)
styles/               token tiers (palette → themes → skin), then
                      chrome.css (shared, every page) + main.css (per-tab)
                      + table.css (games) — docs/css-split.md
js/controls.js        settings menu
js/account.js         sign-in chrome + the profile state (docs/accounts.md)
js/toast.js           shared toast host (docs/ui.md, "Toasts")
assets/fonts/         bundled faces (SIL OFL)
docs/                 tech docs (see below)
scripts/              healthcheck, resume PDF rebuild, radio dev token

The journal data (songs.json, movies.json) is generated by tools in the DeetsOTD repo and committed here; the site is served completely flat.

resume/index.html is the resume's source of truth — its print stylesheet is the PDF layout. After editing the resume content, run powershell -File scripts/build-resume-pdf.ps1 to stamp the updated-on date and regenerate resume/AdityaSundaram_Resume.pdf (headless Edge), then commit both. Movie posters come from TMDB (URLs only — this site uses the TMDB API but is not endorsed or certified by TMDB).

Docs

  • docs/architecture.md — the theme×skin token system, page/card anatomy, the toolbar kit, and per-tab details.
  • docs/ui.md — the Vibe appearance picker and interactive chrome.
  • docs/data.md — how the journal JSONs are generated and refreshed (DeetsOTD, Letterboxd exports, TMDB posters).
  • docs/league.md — the League tab: worker architecture, data model, rate-limit guardrails, and what the Riot API can and can't reveal.
  • docs/games.md — the shared game foundation: wire protocol, the table shell, the Durable Object base, and how to add a game. Read this first for anything game-related.
  • docs/bots.md — how the games play themselves: where a bot's brain lives, the botAct contract, each game's decision order and scoring, the difficulty tiers, and how they were measured.
  • docs/cities.md — the DeetsCities board game: rules engine, board data, wire protocol, the bento layout, the identity / disconnect-grace / rejoin rules, and what's still unbuilt.
  • docs/mahjong.md — DeetsMahjong: the HK rules engine, faan table, claim windows, hidden-info wire protocol, the identity / disconnect-grace / rejoin rules, and what's still unbuilt.
  • docs/poker.md — DeetsPoker: the hold'em engine, the chip ladder, the Winnings ledger, stepping away (sit-out, the ante to return, the three re-join modes), and the phase-2 worker's to-do list.
  • docs/stats.md — game stats (accounts phase 2): standings, what each engine already counts and what it doesn't, the results pipeline and D1 schema. Live since 2026-07-29 — the schema, /ingest, /me/stats, and /me/export all ship in DeetsAccounts.

Run locally

Any static server from the repo root, e.g.:

python -m http.server 8787

Then open http://localhost:8787.

Deploy

Cloudflare Pages, wired to this repo — push and it deploys.

_headers at the root sets max-age=0, must-revalidate on every .css and .js, overriding Pages' four-hour default so a deploy can't pair fresh HTML with a stale stylesheet in a returning visitor's browser.

License

MIT. Fonts under assets/fonts/ carry their own licenses — see assets/fonts/NOTICE.txt.

About

My personal site — a dependency-free static site on Cloudflare Pages: multiplayer games, music and film journals, a League stats tracker, and Google sign-in.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages