Open comments for this post
Devlog 3
A public demo, backend and all, with no backend
The problem with showing WeekLog to anyone outside my team: it needs a Cloudflare Worker, a D1 database, and R2 storage to do anything. You can’t just hand someone a link and let them click around. So for a Stardance demo I needed a version that runs entirely in the browser, with realistic data, that nobody can break.
Here’s the thing that made it almost free to build: every single data call in the app already went through just four functions in one file (api.ts). I set it up that way months ago so the UI never talks to the network directly. So to fake the entire backend, I didn’t touch a single feature screen. I swapped those four functions to delegate to an in-browser mock instead of fetch, ported the red/amber/green compliance logic verbatim out of the Worker, and seeded sample data into localStorage with dates relative to today so the demo always shows a realistic spread of healthy and flagged days. A little “DEMO · Reset” pill in the corner lets anyone wipe it back to clean.
The lesson worth stealing: if every network call in your app funnels through one tiny choke point, you can replace your whole backend with a fake one without rewriting the app. This is the second time that one boring decision has paid off (the first was dropping in a full redesign without touching the logic).
It’s honest about its own shortcuts, documented in a DEMO.md: uploaded image blobs live in memory so they show a placeholder after a refresh, and the ZIP export downloads a manifest instead of real zipping. Real Supabase magic-link auth is kept so the sign-in flow is genuine; everyone who logs in is just made an admin over the sample data.
40/40 tests pass, clean production build, tsc clean. Live as a static site on Cloudflare Pages, no Worker behind it. More to come: wiring the real Google Drive connector, a proper compliance summary view, and per-file delete.
Next up: wiring the real Google Drive sync, a team-wide compliance summary view, and per-file delete.
Open comments for this post
Quick one today. I needed multi-file uploads on meeting days, you should be able to attach several photos to a single meeting requirement, not just one. Turns out I’d already solved this exact problem for deadline proof files a while back. So instead of reinventing it, I basically reused the pattern I’d already built: same upload handling, same storage path, same way of listing and attaching multiple files to one thing.
Honestly the satisfying part is that this was easy because of how I set things up earlier. Past me put the upload wiring in one shared place instead of copy-pasting it per feature, so extending it from “deadlines can have many files” to “meetings can too” was a small change, not a rewrite. It’s a nice reminder that the boring structural decisions pay off later. The work you do once to make the next change cheap is invisible until the moment it saves you.
Onto the next thing. Still want to wire up the real Google Drive connector (the stub’s already in place for when our mentors share a folder), add a proper compliance summary view, and let people delete individual files.
Open comments for this post
Devlog
Went from empty repo to a deployed, working app this session. Here’s what’s actually in it.
The core is a calendar. I mark which days are meeting days (with a bulk option so I can set “every Tuesday and Thursday” in one go instead of clicking 40 times). The second I mark a day, it snapshots the current requirement checklist onto that day, things like attendance, robot accomplishments, build needs, performance goals, photos of sketches. I built it as a snapshot on purpose so that editing the requirements later doesn’t reach back and rewrite old meetings.
On each meeting day you can take attendance against the full 21-person roster, log accomplishments and build needs and failures (each tagged to a subsystem like drivetrain/shooter/climber), and upload photos and docs. Files go to Cloudflare R2.
Then the part that makes it more than a folder: a compliance engine that derives a red/amber/green status for every day and every deadline. Green if all the compulsory stuff is in, amber if it’s recent and still in progress, red if a past meeting is missing something required. All of that rolls up into a dashboard that opens with one big team status plus a “needs attention” list of everything currently red, so you can see in two seconds where the team is behind. It also tracks standalone deadlines separate from meetings (our social media challenges have their own due dates and actually score competition points), and those go red when overdue.
There’s a search/browse view across everything logged, an admin area for managing the roster and editing what counts as compulsory, and ZIP export of any day’s media plus a summary.
Stack is all Cloudflare free tier: React + Vite frontend on Pages, a TypeScript Hono API on Workers, D1 (SQLite) for data, R2 for files, Supabase magic-link for login. 71 tests on the worker covering the compliance logic.
Two things I’m glad I built in. A hard free-tier guard: files cap at 10MB and the worker refuses any upload that’d push total storage past 8GB, so a school project can never surprise me with a bill. And a clean separation between the UI and all the network/auth wiring, which let me drop in the full Team Qatar redesign without touching how anything works.
This is v1, there’s a Google Drive connector already stubbed in for when our mentors share a folder, and a lot more I want to add. More to come.