{"name":"findplate","url":"https://plate.findmalek.engineer","llms":"https://plate.findmalek.engineer/llms.txt","full":"https://plate.findmalek.engineer/llms-full.txt","pages":[{"slug":"index","title":"Introduction","description":"What findplate generates and how the docs are laid out.","group":"Start","url":"https://plate.findmalek.engineer/docs","markdown":"https://plate.findmalek.engineer/docs/index.md","headings":[{"depth":2,"title":"What you get","id":"what-you-get"},{"depth":2,"title":"Where to go next","id":"where-to-go-next"},{"depth":2,"title":"Status","id":"status"}]},{"slug":"why","title":"Why findplate","description":"The philosophy, what is in, what is out and why.","group":"Start","url":"https://plate.findmalek.engineer/docs/why","markdown":"https://plate.findmalek.engineer/docs/why.md","headings":[{"depth":2,"title":"Philosophy","id":"philosophy"},{"depth":2,"title":"What is in","id":"what-is-in"},{"depth":2,"title":"What is out","id":"what-is-out"},{"depth":2,"title":"Why these choices","id":"why-these-choices"},{"depth":2,"title":"Where to go next","id":"where-to-go-next"}]},{"slug":"faq","title":"FAQ","description":"Short answers to common questions.","group":"Start","url":"https://plate.findmalek.engineer/docs/faq","markdown":"https://plate.findmalek.engineer/docs/faq.md","headings":[{"depth":2,"title":"Can I add a module after generating?","id":"can-i-add-a-module-after-generating"},{"depth":2,"title":"Can I remove a module later?","id":"can-i-remove-a-module-later"},{"depth":2,"title":"Does the project depend on findplate?","id":"does-the-project-depend-on-findplate"},{"depth":2,"title":"Why do I need bun?","id":"why-do-i-need-bun"},{"depth":2,"title":"Why pnpm and not npm or yarn?","id":"why-pnpm-and-not-npm-or-yarn"},{"depth":2,"title":"What happens when a key is missing?","id":"what-happens-when-a-key-is-missing"},{"depth":2,"title":"Can I use a different database?","id":"can-i-use-a-different-database"},{"depth":2,"title":"Can I change the design after generating?","id":"can-i-change-the-design-after-generating"},{"depth":2,"title":"Where do I report a problem?","id":"where-do-i-report-a-problem"}]},{"slug":"quickstart","title":"Quickstart","description":"From zero to a running project in a few minutes.","group":"Start","url":"https://plate.findmalek.engineer/docs/quickstart","markdown":"https://plate.findmalek.engineer/docs/quickstart.md","headings":[{"depth":2,"title":"Requirements","id":"requirements"},{"depth":2,"title":"Create a project","id":"create-a-project"},{"depth":2,"title":"Run it","id":"run-it"},{"depth":2,"title":"Next steps","id":"next-steps"}]},{"slug":"project-structure","title":"Project structure","description":"The turborepo the cli generates.","group":"Start","url":"https://plate.findmalek.engineer/docs/project-structure","markdown":"https://plate.findmalek.engineer/docs/project-structure.md","headings":[{"depth":2,"title":"Core and modules","id":"core-and-modules"},{"depth":2,"title":"One rule for the apps","id":"one-rule-for-the-apps"},{"depth":2,"title":"Shared code lives in common","id":"shared-code-lives-in-common"},{"depth":2,"title":"Commands","id":"commands"},{"depth":2,"title":"Environment","id":"environment"}]},{"slug":"cli","title":"CLI reference","description":"Every flag of findplate create, and the mode for scripts and coding agents.","group":"CLI","url":"https://plate.findmalek.engineer/docs/cli","markdown":"https://plate.findmalek.engineer/docs/cli.md","headings":[{"depth":2,"title":"Flags","id":"flags"},{"depth":2,"title":"Interactive mode","id":"interactive-mode"},{"depth":2,"title":"Agent mode","id":"agent-mode"},{"depth":2,"title":"What it does","id":"what-it-does"},{"depth":2,"title":"Git","id":"git"},{"depth":2,"title":"Exit codes","id":"exit-codes"},{"depth":2,"title":"Other commands","id":"other-commands"}]},{"slug":"updates","title":"Updates","description":"Pull template improvements into an existing project with findplate update, and keep dependencies current.","group":"CLI","url":"https://plate.findmalek.engineer/docs/updates","markdown":"https://plate.findmalek.engineer/docs/updates.md","headings":[{"depth":2,"title":"How it works","id":"how-it-works"},{"depth":2,"title":"Flags","id":"flags"},{"depth":2,"title":"Dependencies","id":"dependencies"},{"depth":2,"title":"Update notice","id":"update-notice"}]},{"slug":"add-doctor","title":"Add and doctor","description":"Turn on a module in an existing project, and check that the project is healthy.","group":"CLI","url":"https://plate.findmalek.engineer/docs/add-doctor","markdown":"https://plate.findmalek.engineer/docs/add-doctor.md","headings":[{"depth":2,"title":"findplate add","id":"findplate-add"},{"depth":2,"title":"findplate remove","id":"findplate-remove"},{"depth":2,"title":"findplate doctor","id":"findplate-doctor"}]},{"slug":"modules","title":"Modules","description":"Optional packages the cli switches on or off, grouped, with the profiles that pick them.","group":"Modules","url":"https://plate.findmalek.engineer/docs/modules","markdown":"https://plate.findmalek.engineer/docs/modules.md","headings":[{"depth":2,"title":"Profiles","id":"profiles"},{"depth":2,"title":"Available","id":"available"},{"depth":3,"title":"Product pages","id":"product-pages"},{"depth":3,"title":"Platform","id":"platform"},{"depth":3,"title":"Notifications","id":"notifications"},{"depth":3,"title":"Analytics","id":"analytics"},{"depth":3,"title":"Observability and secrets","id":"observability-and-secrets"},{"depth":2,"title":"What each module needs from you","id":"what-each-module-needs-from-you"},{"depth":2,"title":"Dependencies between modules","id":"dependencies-between-modules"}]},{"slug":"storage","title":"Storage","description":"Uploads to any S3 API.","group":"Modules","url":"https://plate.findmalek.engineer/docs/storage","markdown":"https://plate.findmalek.engineer/docs/storage.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"ai","title":"AI","description":"Vercel AI SDK with Groq, OpenAI or Anthropic.","group":"Modules","url":"https://plate.findmalek.engineer/docs/ai","markdown":"https://plate.findmalek.engineer/docs/ai.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"docs-module","title":"Docs site","description":"A fumadocs site inside your project.","group":"Modules","url":"https://plate.findmalek.engineer/docs/docs-module","markdown":"https://plate.findmalek.engineer/docs/docs-module.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"umami","title":"Umami","description":"Self-hosted web analytics script.","group":"Modules","url":"https://plate.findmalek.engineer/docs/umami","markdown":"https://plate.findmalek.engineer/docs/umami.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"databuddy","title":"Databuddy","description":"Cookieless analytics.","group":"Modules","url":"https://plate.findmalek.engineer/docs/databuddy","markdown":"https://plate.findmalek.engineer/docs/databuddy.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"openobserve","title":"OpenObserve","description":"Otel traces from the api.","group":"Modules","url":"https://plate.findmalek.engineer/docs/openobserve","markdown":"https://plate.findmalek.engineer/docs/openobserve.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"glitchtip","title":"GlitchTip","description":"Error tracking with the Sentry SDK.","group":"Modules","url":"https://plate.findmalek.engineer/docs/glitchtip","markdown":"https://plate.findmalek.engineer/docs/glitchtip.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"infisical","title":"Infisical","description":"Secrets for dev through the infisical cli.","group":"Modules","url":"https://plate.findmalek.engineer/docs/infisical","markdown":"https://plate.findmalek.engineer/docs/infisical.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"langfuse","title":"Langfuse","description":"LLM tracing for the ai module.","group":"Modules","url":"https://plate.findmalek.engineer/docs/langfuse","markdown":"https://plate.findmalek.engineer/docs/langfuse.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"waitlist","title":"Waitlist","description":"Email signup on the landing page.","group":"Modules","url":"https://plate.findmalek.engineer/docs/waitlist","markdown":"https://plate.findmalek.engineer/docs/waitlist.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"roadmap","title":"Roadmap","description":"A public /roadmap from GitHub milestones.","group":"Modules","url":"https://plate.findmalek.engineer/docs/roadmap","markdown":"https://plate.findmalek.engineer/docs/roadmap.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"status","title":"Status","description":"A public /status page with live checks.","group":"Modules","url":"https://plate.findmalek.engineer/docs/status","markdown":"https://plate.findmalek.engineer/docs/status.md","headings":[{"depth":2,"title":"What it adds","id":"what-it-adds"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Remove","id":"remove"},{"depth":2,"title":"Swap","id":"swap"}]},{"slug":"notification","title":"Notification","description":"Email, Telegram and WhatsApp behind one notifier, with branded react-email templates and a preview app.","group":"Modules","url":"https://plate.findmalek.engineer/docs/notification","markdown":"https://plate.findmalek.engineer/docs/notification.md","headings":[{"depth":2,"title":"Channels","id":"channels"},{"depth":2,"title":"Sending","id":"sending"},{"depth":2,"title":"Templates","id":"templates"},{"depth":2,"title":"Branding","id":"branding"},{"depth":2,"title":"Preview app","id":"preview-app"},{"depth":2,"title":"Auth","id":"auth"},{"depth":2,"title":"Set up Telegram","id":"set-up-telegram"},{"depth":2,"title":"Set up WhatsApp","id":"set-up-whatsapp"},{"depth":2,"title":"Add your email domain","id":"add-your-email-domain"},{"depth":2,"title":"Test it","id":"test-it"},{"depth":2,"title":"Remove","id":"remove"}]},{"slug":"webhooks","title":"Webhooks","description":"Verify inbound webhooks with hmac, svix or a secret header.","group":"Modules","url":"https://plate.findmalek.engineer/docs/webhooks","markdown":"https://plate.findmalek.engineer/docs/webhooks.md","headings":[{"depth":2,"title":"Helpers","id":"helpers"}]},{"slug":"rate-limiting","title":"Rate limiting","description":"Per route and per caller limits on the api, in memory or on Upstash Redis.","group":"Modules","url":"https://plate.findmalek.engineer/docs/rate-limiting","markdown":"https://plate.findmalek.engineer/docs/rate-limiting.md","headings":[{"depth":2,"title":"What is limited","id":"what-is-limited"},{"depth":2,"title":"Backends","id":"backends"}]},{"slug":"i18n","title":"Internationalization","description":"next-intl in web and dashboard with English and French, a language switcher and hreflang in the sitemap.","group":"Modules","url":"https://plate.findmalek.engineer/docs/i18n","markdown":"https://plate.findmalek.engineer/docs/i18n.md","headings":[{"depth":2,"title":"How locales are chosen","id":"how-locales-are-chosen"},{"depth":2,"title":"Messages","id":"messages"},{"depth":2,"title":"Add a language","id":"add-a-language"},{"depth":2,"title":"Language switcher","id":"language-switcher"},{"depth":2,"title":"SEO","id":"seo"},{"depth":2,"title":"Env keys","id":"env-keys"}]},{"slug":"flags","title":"Feature flags","description":"Small typed feature flags with code defaults, env overrides and per user rollouts edited in the dashboard.","group":"Modules","url":"https://plate.findmalek.engineer/docs/flags","markdown":"https://plate.findmalek.engineer/docs/flags.md","headings":[{"depth":2,"title":"Declare a flag","id":"declare-a-flag"},{"depth":2,"title":"Use a flag","id":"use-a-flag"},{"depth":2,"title":"Where a value comes from","id":"where-a-value-comes-from"},{"depth":2,"title":"Env keys","id":"env-keys"},{"depth":2,"title":"Swap to the Vercel Flags SDK","id":"swap-to-the-vercel-flags-sdk"}]},{"slug":"jobs","title":"Jobs","description":"Background jobs and cron on your existing Postgres with pg-boss, typed with zod.","group":"Modules","url":"https://plate.findmalek.engineer/docs/jobs","markdown":"https://plate.findmalek.engineer/docs/jobs.md","headings":[{"depth":2,"title":"Define a job","id":"define-a-job"},{"depth":2,"title":"Cron","id":"cron"},{"depth":2,"title":"Admin procedures","id":"admin-procedures"},{"depth":2,"title":"Running the worker","id":"running-the-worker"},{"depth":2,"title":"Graceful shutdown","id":"graceful-shutdown"},{"depth":2,"title":"Env keys","id":"env-keys"}]},{"slug":"logger","title":"Logger","description":"Structured json logs with request ids and secret redaction for the api, web and dashboard.","group":"Modules","url":"https://plate.findmalek.engineer/docs/logger","markdown":"https://plate.findmalek.engineer/docs/logger.md","headings":[{"depth":2,"title":"Why not pino","id":"why-not-pino"},{"depth":2,"title":"What you get","id":"what-you-get"},{"depth":2,"title":"Web and dashboard","id":"web-and-dashboard"},{"depth":2,"title":"With glitchtip and openobserve","id":"with-glitchtip-and-openobserve"},{"depth":2,"title":"Env keys","id":"env-keys"}]},{"slug":"presets","title":"Presets","description":"Design starting points, one folder each.","group":"Design","url":"https://plate.findmalek.engineer/docs/presets","markdown":"https://plate.findmalek.engineer/docs/presets.md","headings":[{"depth":2,"title":"Available","id":"available"},{"depth":2,"title":"Anatomy","id":"anatomy"}]},{"slug":"theming","title":"Customizing the theme","description":"Use shadcn create to design any theme and drop it into your project.","group":"Design","url":"https://plate.findmalek.engineer/docs/theming","markdown":"https://plate.findmalek.engineer/docs/theming.md","headings":[{"depth":2,"title":"How a preset maps to shadcn create","id":"how-a-preset-maps-to-shadcn-create"},{"depth":2,"title":"Apply a theme to a generated project","id":"apply-a-theme-to-a-generated-project"},{"depth":2,"title":"Make it a preset","id":"make-it-a-preset"}]},{"slug":"seo","title":"SEO","description":"Sitemap, robots, canonical urls and json-ld for the landing page.","group":"Design","url":"https://plate.findmalek.engineer/docs/seo","markdown":"https://plate.findmalek.engineer/docs/seo.md","headings":[{"depth":2,"title":"Previews stay out of search","id":"previews-stay-out-of-search"},{"depth":2,"title":"The docs module","id":"the-docs-module"},{"depth":2,"title":"More structured data","id":"more-structured-data"}]},{"slug":"deploy","title":"Deploy","description":"Ship a generated project on Vercel or your own server.","group":"Infra","url":"https://plate.findmalek.engineer/docs/deploy","markdown":"https://plate.findmalek.engineer/docs/deploy.md","headings":[{"depth":2,"title":"Environment","id":"environment"},{"depth":2,"title":"Vercel","id":"vercel"},{"depth":2,"title":"Self-host with docker","id":"self-host-with-docker"},{"depth":2,"title":"Dokploy","id":"dokploy"},{"depth":2,"title":"Automated setup","id":"automated-setup"},{"depth":2,"title":"Hosting these docs","id":"hosting-these-docs"}]},{"slug":"github","title":"GitHub setup","description":"Repo, project board, labels, rules, variables and secrets in one command.","group":"Infra","url":"https://plate.findmalek.engineer/docs/github","markdown":"https://plate.findmalek.engineer/docs/github.md","headings":[{"depth":2,"title":"What it does","id":"what-it-does"},{"depth":2,"title":"Safe to run again","id":"safe-to-run-again"},{"depth":2,"title":"Options","id":"options"}]},{"slug":"provision","title":"Provision","description":"Dokploy projects, S3 buckets, DNS, the Turborepo cache and nightly database backups, from one command.","group":"Infra","url":"https://plate.findmalek.engineer/docs/provision","markdown":"https://plate.findmalek.engineer/docs/provision.md","headings":[{"depth":2,"title":"DNS","id":"dns"},{"depth":2,"title":"Backups","id":"backups"},{"depth":3,"title":"Restore","id":"restore"},{"depth":2,"title":"Database and S3 browsers","id":"database-and-s3-browsers"},{"depth":2,"title":"What is verified","id":"what-is-verified"}]},{"slug":"previews","title":"Previews on Dokploy","description":"Production on Vercel, every pull request preview on your own Dokploy server.","group":"Infra","url":"https://plate.findmalek.engineer/docs/previews","markdown":"https://plate.findmalek.engineer/docs/previews.md","headings":[{"depth":2,"title":"What a PR gets","id":"what-a-pr-gets"},{"depth":2,"title":"Set up Dokploy","id":"set-up-dokploy"},{"depth":2,"title":"Repo settings","id":"repo-settings"},{"depth":2,"title":"Vercel stays production only","id":"vercel-stays-production-only"}]},{"slug":"self-hosted","title":"Self-hosted tools","description":"Run umami, openobserve, glitchtip, infisical and langfuse next to your project.","group":"Infra","url":"https://plate.findmalek.engineer/docs/self-hosted","markdown":"https://plate.findmalek.engineer/docs/self-hosted.md","headings":[{"depth":2,"title":"umami","id":"umami"},{"depth":2,"title":"openobserve","id":"openobserve"},{"depth":2,"title":"glitchtip","id":"glitchtip"},{"depth":2,"title":"infisical","id":"infisical"},{"depth":2,"title":"langfuse","id":"langfuse"}]},{"slug":"agents","title":"Agent rules and skills","description":"One source of rules for every coding agent.","group":"Agents and CI","url":"https://plate.findmalek.engineer/docs/agents","markdown":"https://plate.findmalek.engineer/docs/agents.md","headings":[{"depth":2,"title":"Rules with ruler","id":"rules-with-ruler"},{"depth":2,"title":"Skills","id":"skills"},{"depth":3,"title":"Public skills","id":"public-skills"},{"depth":2,"title":"Today","id":"today"}]},{"slug":"llm","title":"For LLMs and agents","description":"Every docs page as markdown, plus llms.txt, so a tool can read findplate without scraping html.","group":"Agents and CI","url":"https://plate.findmalek.engineer/docs/llm","markdown":"https://plate.findmalek.engineer/docs/llm.md","headings":[{"depth":2,"title":"What is served","id":"what-is-served"},{"depth":2,"title":"Ask for markdown","id":"ask-for-markdown"},{"depth":2,"title":"Feed it to a tool","id":"feed-it-to-a-tool"},{"depth":2,"title":"Crawlers","id":"crawlers"},{"depth":2,"title":"In your generated project","id":"in-your-generated-project"}]},{"slug":"ci","title":"CI","description":"Checks for the generator and for generated projects.","group":"Agents and CI","url":"https://plate.findmalek.engineer/docs/ci","markdown":"https://plate.findmalek.engineer/docs/ci.md","headings":[{"depth":2,"title":"In the findplate repo","id":"in-the-findplate-repo"},{"depth":2,"title":"In a generated project","id":"in-a-generated-project"},{"depth":2,"title":"Run the checks yourself","id":"run-the-checks-yourself"}]}]}