Commit

de2446b

Looked around. There are 2 generations here: legacy src/ + lib/ (express/fastify, firebase auth, docker) and service/ (bun + elysia, data/ -> local server -> supabase -> static site). What's bugging you most: auth, sync flow, or supabase?
Haha I want to redesign the whole thing. About current infra, what I didn't like: ・ Dependent on VS Code, which I haven't opened in 4 months ・ Requires a laptop to write, I want a nice backoffice ・ That the vault lives in a gitignored dir in the repo, so it's like nesting repos…
Shape I'm picturing: a Bun CLI you run in the vault under pitchfork. It indexes the .md, serves a web backoffice, commits+pushes with a GitHub App token, and publishes to Supabase on save. Q: always-on box or laptop?
Then Dokploy could own it: one Bun container, vault = git clone in a volume, GitHub App token pulls/pushes, backoffice behind your existing Supabase login. Keep mise+pitchfork for local dev only, or run it bare on the host?
I think so. Vault .md = source of truth, private included. publish.ts copies only public notes (plus tree/sitegraph/index/search keys) to Supabase. generate_static_site compiles those rows, caches the result in the row, renders HTML into published/ (dt.in.th repo) and pushes to…
dt.in.thThai Pangsakulyanont
Yes: public: true but not reachable from HomePage. They still go to Supabase (row + search keys, compiled too) but get no static HTML and stay out of tree/index/sitemap. A visit hits 404.html, and the client fetches it via notes_get_contents.
Correct. We can start infra side anew. Let's start anew. Install @mattpocock skills. Put the current checkout in a worktree for reference. And let's get /grilling.
Done: mattpocock-skills plugin installed (user scope), old checkout parked at ./legacy on a legacy branch. Grilling round 1. Reply "yes" per Q to take my rec. Q1 Where it runs: bare on the VPS under pitchfork, vault as a plain git checkout so Claude Code can work in it…
Q1, Q2, Q3, Q5, Q6. Agree Q4. Right now publish is all-or-nothing, as in publishing the vault content. Not sure if with the new version, can we can just publish selectively.
Round 2, all on Q4. Selective fits well, because Supabase is already a separate copy: the static site is built from Supabase rows, not from the vault. Q7 Unit of publish: per note. "Publish" copies that note's current source into its Supabase row, and the row becomes the published snapshot. Vault edits stay private drafts until you publish again. -> Yes. Q8 Derived data (tree, sitegraph, search index, search keys, static HTML) is computed from the published rows, not from the vault. That way a published note can't expose an unpublished note's title or links. -> Yes. Q9 Is public: true still needed? If publishing is explicit, the front matter flag repeats it. I'd drop it as the gate: publishing a note sets public: true in the file, and unpublishing deletes the row and removes the flag. One state, readable from the file. -> Yes, with the file flag kept in sync automatically. Q10 After each publish, rebuild and push the static site automatically (debounced, so publishing 5 notes in a row makes 1 commit to dt.in.th)? -> Yes. Q11 Backoffice shows a "changed since publish" badge (vault version != row version), plus a "publish all changed" batch action, so the old all-or-nothing flow is still one click. -> Yes.
dt.in.thThai Pangsakulyanont

commit de2446b

Q7, Q8, 10, 11. Agree Q9. Still needed. public: true is the "desired state" so to speak. To unpublish I would set public: false and the back office should slate it for unpublishing. Btw, by starting anew I mean start a new Git history. On cutover we merge main in with -s…