Documentation hosting
All TailSpend documentation is generated as static HTML and served by CloudFront
from a private S3 bucket. Production is
https://docs.tailspend.kinesis.studio; beta and dev use
docs.beta.tailspend.kinesis.studio and docs.dev.tailspend.kinesis.studio.
The configured zone is kinesis.studio.
/retains the developer API getting-started guide and its existing anchors./reference.htmlindexes every Markdown document underdocs/, the repository README and the CI guide. Nested pages retain their directory structure with.htmlextensions. Markdown links between these pages are rewritten to the generated HTML; source-code links go to GitHub. Referenced images are copied into the site, including architecture diagrams./help.htmlpreserves the former docs app's guidance for groups, expenses and settlements, with links to support and the apps./developer-reference.htmland/app-reference.htmlretain Swagger UI and their existing JSON contracts. Every entry point links to the rest of the docs.
Build and preview
Run from the repository root:
npx turbo run build --filter=@repo/openapi
python3 -m http.server 3001 --directory apps/infra/dist/api-docs
Browse http://localhost:3001. The generator clears the previous site before writing pages, so deleted documents disappear on the next deployment. Swagger UI uses the pinned unpkg assets; the guide, help, Markdown pages and diagrams are served from S3 without a JavaScript runtime.
Deployment
Deploy Stage builds @repo/openapi before CDK synthesis, including Markdown
changes even when the package source is unchanged (the generator is uncached in
Turbo). ApiDocsStack uploads apps/infra/dist/api-docs/, prunes removed objects
and invalidates CloudFront. Synthesis rejects incomplete site artifacts.
The existing stack, bucket, distribution, DNS alias, ACM certificate and OAC are
retained. S3 blocks all public access; CloudFront serves HTTPS with HSTS and
framing protection. There is no Next.js app or Vercel deployment dependency.
No docs routes use an application server or SPA fallback; nested .html paths
are real S3 objects and work on direct navigation.