Your project should be fast. This doesn’t just mean fast to build, run and deploy. It also means it should be fast to validate ideas, iterate and scale. This is critical for front-loading the important parts of starting a startup: finding product-market fit, iterating on the core concept and scaling to customers.
Your project should be cheap and preferably free to start. You shouldn’t be spending money on tools and infrastructure if you don’t have customers yet. It should avoid a flat cost, or have a generous free tier. You should aim to make your project self-sustaining, with the goal of avoiding any recurring costs upfront and finding services that scale with you.
Your project should be opinionated. This means that the tooling should be designed to work together, and the project should be designed to work with the tooling. This is important for reducing friction and increasing productivity.
Your project should be modern. This means that the tooling should be actively maintained, and the project should be designed to take advantage of the latest features. This is important for reducing technical debt and increasing longevity. This doesn’t mean you should use bleeding edge or experimental tooling, but instead should use the latest stable versions of modern tools with healthy communities and long-term support.
Your project should be safe. Practically, this means end-to-end type safety, securely handling secrets and using platforms that offer robust security posture.
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"jtbdos docs","colors":{"primary":"#f35815","light":"#f35815","dark":"#f35815"},"favicon":"/images/icon.png","styling":{"eyebrows":null,"codeblocks":"system"},"logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/images/jtbdos-logo-full-with-thrv.svg","dark":"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/images/jtbdos-logo-full-with-thrv.svg"},"background":{"decoration":"windows"},"navbar":{"primary":{"type":"github","href":"https://github.com/thrv/jtbdos4"}},"search":{"prompt":"Search or ask..."},"footer":{"socials":{"x":"https://x.com/haydenbleasel","github":"https://github.com/haydenbleasel/next-forge","linkedin":"https://www.linkedin.com/in/haydenbleasel"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"thrv-c7d92728","hasAudioNarration":false,"actualSubdomain":"thrv-c7d92728","customDomains":["docs.jtbdos.com"],"gitSource":{"type":"github","owner":"thrv","repo":"jtbdos4","deployBranch":"main","contentDirectory":"apps/jtbdos-docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e6b403d4026a3ef7729d","collectionId":"e31b713b-bfcb-4d49-8138-d29cda6a8c61","schemaVersion":"v2"},"entitlements":{},"buildId":"6a21e6b403d4026a3ef7729d:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Packages","count":41},{"language":"default","tag":"Migrations","count":15},{"language":"default","tag":"Getting Started","count":10},{"language":"default","tag":"Design System","count":9},{"language":"default","tag":"Addons","count":8},{"language":"default","tag":"Libraries","count":7},{"language":"default","tag":"Apps","count":7},{"language":"default","tag":"Database","count":6},{"language":"default","tag":"Introduction","count":5},{"language":"default","tag":"Security","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"philosophy","slug":"/philosophy","pageMetadata":{"title":"Philosophy","description":"Guiding principles for the development of JTBDOS.","href":"/philosophy"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Guiding principles for the development of JTBDOS.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading}=_components;if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`fast`,children:`Fast`}),`\n`,_jsxs(_components.p,{children:[`Your project should be `,_jsx(_components.strong,{children:`fast`}),`. This doesn’t just mean fast to build, run and deploy. It also means it should be fast to validate ideas, iterate and scale. This is critical for front-loading the important parts of starting a startup: finding product-market fit, iterating on the core concept and scaling to customers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cheap`,children:`Cheap`}),`\n`,_jsxs(_components.p,{children:[`Your project should be `,_jsx(_components.strong,{children:`cheap`}),` and preferably free to start. You shouldn’t be spending money on tools and infrastructure if you don’t have customers yet. It should avoid a flat cost, or have a generous free tier. You should aim to make your project self-sustaining, with the goal of avoiding any recurring costs upfront and finding services that scale with you.`]}),`\n`,_jsx(Heading,{level:`3`,id:`opinionated`,children:`Opinionated`}),`\n`,_jsxs(_components.p,{children:[`Your project should be `,_jsx(_components.strong,{children:`opinionated`}),`. This means that the tooling should be designed to work together, and the project should be designed to work with the tooling. This is important for reducing friction and increasing productivity.`]}),`\n`,_jsx(Heading,{level:`3`,id:`modern`,children:`Modern`}),`\n`,_jsxs(_components.p,{children:[`Your project should be `,_jsx(_components.strong,{children:`modern`}),`. This means that the tooling should be actively maintained, and the project should be designed to take advantage of the latest features. This is important for reducing technical debt and increasing longevity. This doesn’t mean you should use bleeding edge or experimental tooling, but instead should use the latest stable versions of modern tools with healthy communities and long-term support.`]}),`\n`,_jsx(Heading,{level:`3`,id:`safe`,children:`Safe`}),`\n`,_jsxs(_components.p,{children:[`Your project should be `,_jsx(_components.strong,{children:`safe`}),`. Practically, this means end-to-end type safety, securely handling secrets and using platforms that offer robust security posture.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Philosophy","description":"Guiding principles for the development of JTBDOS.","href":"/philosophy"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Fast","slug":"fast","depth":3,"children":[]},{"title":"Cheap","slug":"cheap","depth":3,"children":[]},{"title":"Opinionated","slug":"opinionated","depth":3,"children":[]},{"title":"Modern","slug":"modern","depth":3,"children":[]},{"title":"Safe","slug":"safe","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"thrv-c7d92728","siteName":"jtbdos docs","title":"Philosophy - jtbdos docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"philosophy.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Guiding principles for the development of JTBDOS.\">\u003cmeta data-mint-head name=\"application-name\" content=\"jtbdos docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Philosophy - jtbdos docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Guiding principles for the development of JTBDOS.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"jtbdos docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.jtbdos.com/philosophy\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://thrv-c7d92728.mintlify.app/_mintlify/api/og/v2?division=Introduction\u0026amp;title=Philosophy\u0026amp;description=Guiding+principles+for+the+development+of+JTBDOS.\u0026amp;theme=87e5d5443d5dde3c753ee24e\u0026amp;signature=03cccd33202030eb3837819b7741f2432c0b07e2c645736b72e100c118721418\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Philosophy - jtbdos docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Guiding principles for the development of JTBDOS.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://thrv-c7d92728.mintlify.app/_mintlify/api/og/v2?division=Introduction\u0026amp;title=Philosophy\u0026amp;description=Guiding+principles+for+the+development+of+JTBDOS.\u0026amp;theme=87e5d5443d5dde3c753ee24e\u0026amp;signature=03cccd33202030eb3837819b7741f2432c0b07e2c645736b72e100c118721418\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"jtbdos docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#f35815\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.jtbdos.com/philosophy\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/philosophy.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.jtbdos.com/#organization\",\"name\":\"jtbdos docs\",\"url\":\"https://docs.jtbdos.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintlify.s3.us-west-1.amazonaws.com/thrv-c7d92728/images/jtbdos-logo-full-with-thrv.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.jtbdos.com#website\",\"name\":\"jtbdos docs\",\"url\":\"https://docs.jtbdos.com\",\"publisher\":{\"@id\":\"https://docs.jtbdos.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.jtbdos.com/philosophy#webpage\",\"url\":\"https://docs.jtbdos.com/philosophy\",\"name\":\"Philosophy\",\"description\":\"Guiding principles for the development of JTBDOS.\",\"isPartOf\":{\"@id\":\"https://docs.jtbdos.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.jtbdos.com/philosophy#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.jtbdos.com/philosophy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Introduction\",\"item\":\"https://docs.jtbdos.com/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Philosophy\",\"item\":\"https://docs.jtbdos.com/philosophy\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.jtbdos.com/philosophy#article\",\"headline\":\"Philosophy\",\"name\":\"Philosophy\",\"description\":\"Guiding principles for the development of JTBDOS.\",\"url\":\"https://docs.jtbdos.com/philosophy\",\"mainEntityOfPage\":{\"@id\":\"https://docs.jtbdos.com/philosophy#webpage\"},\"publisher\":{\"@id\":\"https://docs.jtbdos.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.jtbdos.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"jtbdos docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"jtbdos docs","nav":{"global":null,"tabs":[{"tab":"Getting Started","groups":[{"group":"Introduction","pages":[{"title":"Overview","description":"What is JTBDOS and how do I get started?","href":"/overview"},{"title":"Philosophy","href":"/philosophy"},{"title":"Structure","description":"Learn how JTBDOS apps and packages are structured.","href":"/structure"},{"title":"Updates","href":"/updates"},{"title":"FAQ","href":"/faq"}]},{"group":"Setup","pages":[{"title":"Prerequisites","href":"/setup/prerequisites"},{"title":"Installation","href":"/setup/installation"},{"title":"Environment Variables","href":"/setup/env"}]},{"group":"Deployment","pages":[{"title":"Deploying to Vercel","href":"/deployment/vercel"},{"title":"Deploying to Netlify","href":"/deployment/netlify"}]}]},{"tab":"Apps","pages":[{"title":"Apps","href":"/apps/api"}]},{"tab":"Packages","pages":[{"title":"Packages","href":"/packages/ai"}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/recipes/ai-chatbot"}]},{"tab":"Migrations","pages":[{"title":"Migrations","href":"/migrations/authentication/authjs"}]},{"tab":"Addons","pages":[{"title":"Addons","href":"/addons/friendlier-words"}]}]},"basePath":"","title":"Philosophy - jtbdos docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}