File map
Where things are — in a site, in the kit, in the theme — and the handful of places that are generated rather than written.
A site
platformkit.config.js the config
index.html the shell, the fonts, the icon links
vite.config.js, velite.config.js, src/main.js two lines each
src/looks/<name>.css the palette(s)
src/components/landing/ the site's own sections and skins (optional)
src/components/<Name>.vue overrides (optional)
src/admin/ registered admin sections (optional)
src/instrument/ a site's readings (optional)
content/
site.md the site record
strings/<lang>/site.md the nav and the CTA
app/ui/<scope>.md UI strings (only what the site changes)
app/tests/** a site's tests (optional)
app/**/results.md a site's results copy (optional)
pages/*.md landing pages
articles/, wiki/, docs/ the prose collections
books/*.md (+ covers) the books
companions/*.md the companions
books/files/<slug>/ extra downloads
ads/, experiments/ calls to action and A/B tests
forms/*.md the forms (forms.md documents)
store/storefront.md, store/products/, store/collections/, store/print.json
sessions/*.md the coaching offers
emails/<kind>.json, emails/policy.md
funnels/*.md, blasts/*.md
uploads/ the library's Uploads root — every picture and file the admin puts in (under the collection's folder: books/, articles/, …), addressed /uploads/<path>; public/ is its other root
db/
schemas/*.sql the site's declared schema
data.sql the site's idempotent rows
functions/<name>/ the site's edge functions
seed.sql the site's seed rows
supabase/ ASSEMBLED (committed outside the monorepo; never edited)
config.toml the site's own, from the kit's template
schemas/, data.sql, functions/, seed.sql
audio/books/<slug>/ the spoken books (LFS) and their manifests
public/ robots.txt, pictures, sw.js (push); print/ and static/ are generated
build/ the site's own tests and scripts
openspec/ specs and changes
.velite/ generated: the compiled content
node_modules/.cache/platformkit/ generated: dev runtime records, downloaded assets, and the plan's shadow project
sites/external/ ignored separately owned site checkouts; platformkit.sites.json holds their remote pinsThe kit — packages/kit
The kit includes @opencoredev/social-sdk as the execution dependency for direct and managed Social provider adapters; Social accounts, grants, schedules and delivery records remain owned by the site's Supabase project.
bin/platformkit.mjs the CLI (including workspace dev, sites and stop); the root package exposes it through npx GitHub source
vite/index.mjs the Vite plugin (+ tailwind.config.js)
src/lib/ the libraries: content, auth, router, strings, commerce, shipping, chat, support, desk (staff inbox adapters), forms (parse, logic, screens, validate, markdown, condition, api), tts, speech, print-offers, experiments, analytics, look, seo, push, records, markdown (the one document renderer), strings-groups and search-rows (the grammars the build and the browser share), entry and content-live (cloud mode's adapter and live layer)…
src/sdk/ the analytics core the site and the drop-in share (core: the fingerprint id, the session, the queue; posthog: PostHog's surface over it; entry: the script's root)
vendor/formsmd/ the separable parts of forms.md (Apache-2.0; NOTICE), with their tests
src/instrument/ the runner's mechanics: the session, the timing, the voice
build/ every script: assemble, plan, destructive, cron reconciliation, dev, dev-directory, dev-stop, dev-workspace, deploy, deploy-checks, test, velite, strings-io, content-rules, functions-data (the thirteen JSON files the functions import, made before they are served) (whether a record’s fields make sense together, thrown from velite’s prepare so an incoherent declaration fails the build), catalog, emails, funnels, funnel-io, forms, form-io, form-embed, analytics-sdk, analytics-config, rewrites (the host's rewrite rules from deploy/_redirects → dist/_redirects and the nginx template), content-json (the content index for the content API), models, model-io, steps (the runner; steps/ the kit's nineteen records), companion-io, quiz-io, print/*, tts/*, enrich, llm, briefs, voice, prerender, share-images, phone-probe, sales, embed-content, admin-server, admin-pipe (the admin's requests as one function, shared with the admin Edge Function), admin-schemas, store/ (the content store: git.mjs the checkout, rows.mjs the database), content-export (cloud mode's rows out as files), assets (an address resolved to its file), migrate-assets (pictures beside records moved into the library, once), site, theme, content-node, site-*-node, and the tests
supabase/
schemas/NN-<module>.sql the declared schema
data.sql the rows that are not schema
functions/<name>/, functions/_shared/ (the admin function; _shared/github.js the push; _shared/pipe/ the content pipe assembled for it; _shared/access.js the class ladder the app and the functions share; _shared/posthog-wire.js PostHog's wire protocol read into the door's rows, _shared/content-index.ts the content the API answers from in either mode, _shared/api/ the content API's shapes — ids, types, records, entry, query, richtext, context, graphql, keys, errors, flags, openapi (the OpenAPI document) — and the Management API's: management.js (the shapes, the record from an entry, the versions and ids), richtext-to-markdown.js, manage.ts (the writes, the uploads, the webhook definitions, the deliveries, the sweep), pipe.ts (the content pipe for a door); _shared/api/typeform/ the Forms API's (definition, response, query, insights, errors, document — a definition to a forms.md document, JSON Patch), _shared/api/shopify/ the Store API's (products — the offers as Shopify's products, schema — the Storefront SDL and its resolvers, cart), _shared/forms-live.ts the forms from the rows in cloud mode, _shared/api/cal/ the Scheduling API's (event-type, booking, schedule, webhook, envelope), _shared/scheduling-events.ts its deliveries — _shared/vendor/ photon's wasm for the images function; _shared/content/ the built index, gitignored)
seed.sql the accounts
config.toml.templateThe theme — packages/movable-types
src/theme.js the manifest, including optional theme-owned module declarations
src/main.js the entry: the forward, the theme, cloud mode's content loaded, then app.js
src/app.js the app: the css, the look, the session, the mount
src/App.vue, router.js the shell and the route switch
src/layouts/SiteLayout.vue the header, the footer, the veils
src/pages/ Landing, Content, Store, Diagnostics, Call, Admin (the one desk: the CMS, or the live views in production), ApiReference (/api: Scalar over the OpenAPI document), Book (/book/<slug>: the booker on its own page, for cal.com's embed), Preview, Share
src/components/ everything else: content/, landing/ (+ skins), admin/, chat/, support/, store…
src/instrument/ui/ the runner's screens, the results shell and its pages
src/content/ui/<scope>.md the default strings
src/looks/design.css the one design
src/looks/default.css the theme's own palette, worn by a site that registers noneGenerated, never edited
supabase/ in a site (assembled), .velite/, public/static/, public/print/, dist/, .print/, node_modules/.cache/platformkit/, the thirteen files the Edge Functions import (supabase/functions/_shared/{catalog,analytics,cloud,webhooks,bots,commands,spaces,teams,forms}.json, _shared/content/index.json, _shared/emails/{compiled,funnels,strings}.json and cal-webhook/strings.json — all made by build/functions-data.mjs before anything serves or deploys them, and none of them committed, since a generated file in git is a second source of truth and two of these had quietly drifted from the content), content/store/print.json (written by the print build and committed), build/.cache/ (the enrichment's cache), and every id and key a writer gives a record.