[{"data":1,"prerenderedAt":550},["ShallowReactive",2],{"navigation":3,"\u002Fcore\u002Fconcepts":173,"\u002Fcore\u002Fconcepts-surround":545},[4,9,14,19,46,96,109,127,148],{"title":5,"path":6,"stem":7,"icon":8},"Introduction","\u002Fintroduction","01.introduction","i-lucide-info",{"title":10,"path":11,"stem":12,"icon":13},"Installation","\u002Finstallation","02.installation","i-lucide-circle-arrow-down",{"title":15,"path":16,"stem":17,"icon":18},"First App","\u002Ffirst-app","03.first-app","i-lucide-play",{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":45},"Core","i-lucide-container","\u002Fcore","10.core",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Architecture","\u002Fcore\u002Farchitecture","10.core\u002F1.architecture","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"Concepts","\u002Fcore\u002Fconcepts","10.core\u002F2.concepts","i-lucide-lightbulb",{"title":36,"path":37,"stem":38,"icon":39},"Runtime","\u002Fcore\u002Fruntime","10.core\u002F3.runtime","i-lucide-cpu",{"title":41,"path":42,"stem":43,"icon":44},"Modules","\u002Fcore\u002Fmodules","10.core\u002F4.modules","i-lucide-puzzle",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Server","i-simple-icons-nestjs","\u002Fnest","11.nest",[52,55,72,77,82,87,92],{"title":5,"path":53,"stem":54,"icon":8},"\u002Fnest\u002Fintroduction","11.nest\u002F1.introduction",{"title":56,"path":57,"stem":58,"children":59,"icon":71},"Database","\u002Fnest\u002Fdatabase","11.nest\u002F2.database\u002F1.index",[60,61,66],{"title":56,"path":57,"stem":58,"icon":8},{"title":62,"path":63,"stem":64,"icon":65},"Models","\u002Fnest\u002Fdatabase\u002Fmodels","11.nest\u002F2.database\u002F2.models","i-lucide-database-zap",{"title":67,"path":68,"stem":69,"icon":70},"Plugins","\u002Fnest\u002Fdatabase\u002Fplugins","11.nest\u002F2.database\u002F3.plugins","i-lucide-plug","i-lucide-database",{"title":73,"path":74,"stem":75,"icon":76},"Controllers","\u002Fnest\u002Fcontrollers","11.nest\u002F3.controllers","i-lucide-route",{"title":78,"path":79,"stem":80,"icon":81},"Guards","\u002Fnest\u002Fguards","11.nest\u002F4.guards","i-lucide-shield-check",{"title":83,"path":84,"stem":85,"icon":86},"Services","\u002Fnest\u002Fservices","11.nest\u002F5.services","i-lucide-layers",{"title":88,"path":89,"stem":90,"icon":91},"Locales","\u002Fnest\u002Flocales","11.nest\u002F6.locales","i-lucide-languages",{"title":93,"path":94,"stem":95},"Env","\u002Fnest\u002Fenv","11.nest\u002F7.env",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":45},"Client","i-simple-icons-nuxt","\u002Fnuxt","12.nuxt",[102,105],{"title":5,"path":103,"stem":104},"\u002Fnuxt\u002Fintroduction","12.nuxt\u002F1.introduction",{"title":106,"path":107,"stem":108},"Coming Soon","\u002Fnuxt\u002Fcoming-soon","12.nuxt\u002F2.coming-soon",{"title":110,"icon":111,"path":112,"stem":113,"children":114,"page":45},"Configuration","i-lucide-settings","\u002Fconfiguration","13.configuration",[115,119,123],{"title":116,"path":117,"stem":118},"Opensya Config","\u002Fconfiguration\u002Fopensya-config","13.configuration\u002F1.opensya-config",{"title":120,"path":121,"stem":122},"Runtime Config","\u002Fconfiguration\u002Fruntime-config","13.configuration\u002F2.runtime-config",{"title":124,"path":125,"stem":126},"Server Config","\u002Fconfiguration\u002Fserver-config","13.configuration\u002F3.server-config",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":45},"Deployment","i-lucide-cloud","\u002Fdeployment","14.deployment",[133,136,140,144],{"title":5,"path":134,"stem":135},"\u002Fdeployment\u002Fintroduction","14.deployment\u002F1.introduction",{"title":137,"path":138,"stem":139},"Docker","\u002Fdeployment\u002Fdocker","14.deployment\u002F2.docker",{"title":141,"path":142,"stem":143},"Production","\u002Fdeployment\u002Fproduction","14.deployment\u002F3.production",{"title":145,"path":146,"stem":147},"Self Hosting","\u002Fdeployment\u002Fself-hosting","14.deployment\u002F4.self-hosting",{"title":149,"icon":150,"path":151,"stem":152,"children":153,"page":45},"Advanced","i-lucide-plus","\u002Fadvanced","15.advanced",[154,158,162,165,169],{"title":155,"path":156,"stem":157},"Internals","\u002Fadvanced\u002Finternals","15.advanced\u002F1.internals",{"title":159,"path":160,"stem":161},"Compiler","\u002Fadvanced\u002Fcompiler","15.advanced\u002F2.compiler",{"title":41,"path":163,"stem":164},"\u002Fadvanced\u002Fmodules","15.advanced\u002F3.modules",{"title":166,"path":167,"stem":168},"Globals","\u002Fadvanced\u002Fglobals","15.advanced\u002F4.globals",{"title":170,"path":171,"stem":172},"Lifecycle","\u002Fadvanced\u002Flifecycle","15.advanced\u002F5.lifecycle",{"id":174,"title":31,"body":175,"description":538,"extension":539,"links":540,"meta":541,"navigation":542,"path":32,"seo":543,"stem":33,"__hash__":544},"docs\u002F10.core\u002F2.concepts.md",{"type":176,"value":177,"toc":528},"minimark",[178,182,186,189,192,195,200,203,206,249,252,259,262,266,269,272,297,300,304,307,327,330,333,336,340,343,346,360,367,371,374,377,380,384,387,390,461,464,468,471,474,490,493,497,500,503,506,521,524],[179,180,31],"h1",{"id":181},"concepts",[183,184,185],"p",{},"OpenSya is the open-source recruitment infrastructure for modern companies.",[183,187,188],{},"Modular, scalable, and fully owned by you.",[183,190,191],{},"To support this vision, OpenSya is built around a small set of core concepts that define how applications are structured, discovered and executed.",[183,193,194],{},"Understanding these concepts is essential before diving deeper into controllers, services or runtime internals.",[196,197,199],"h2",{"id":198},"convention-over-configuration","Convention Over Configuration",[183,201,202],{},"OpenSya follows a convention-driven architecture.",[183,204,205],{},"Instead of manually registering routes, services or plugins, the runtime automatically discovers and orchestrates your application based on the filesystem structure.",[207,208,214],"pre",{"className":209,"code":210,"filename":211,"language":212,"meta":213,"style":213},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server\u002F\n├── controllers\u002F\n├── services\u002F\n├── database\u002F\n└── guards\u002F\n","Example","txt","",[215,216,217,225,231,237,243],"code",{"__ignoreMap":213},[218,219,222],"span",{"class":220,"line":221},"line",1,[218,223,224],{},"server\u002F\n",[218,226,228],{"class":220,"line":227},2,[218,229,230],{},"├── controllers\u002F\n",[218,232,234],{"class":220,"line":233},3,[218,235,236],{},"├── services\u002F\n",[218,238,240],{"class":220,"line":239},4,[218,241,242],{},"├── database\u002F\n",[218,244,246],{"class":220,"line":245},5,[218,247,248],{},"└── guards\u002F\n",[183,250,251],{},"Each directory has a predefined responsibility understood by the runtime.",[253,254,256],"callout",{"color":255,"icon":29},"primary",[183,257,258],{},"The filesystem is the primary source of truth in OpenSya.",[183,260,261],{},"This approach drastically reduces boilerplate and keeps applications consistent across projects.",[196,263,265],{"id":264},"runtime-orchestration","Runtime Orchestration",[183,267,268],{},"OpenSya automatically orchestrates the application runtime.",[183,270,271],{},"This includes:",[273,274,275,279,282,285,288,291,294],"ul",{},[276,277,278],"li",{},"Route discovery",[276,280,281],{},"Service registration",[276,283,284],{},"Database initialization",[276,286,287],{},"Plugin loading",[276,289,290],{},"Guard registration",[276,292,293],{},"Runtime hooks",[276,295,296],{},"Type generation",[183,298,299],{},"Developers focus on business logic while the runtime handles application wiring.",[196,301,303],{"id":302},"fullstack-architecture","Fullstack Architecture",[183,305,306],{},"OpenSya is designed as a fullstack runtime architecture for recruitment and business platforms.",[207,308,310],{"className":209,"code":309,"filename":26,"language":212,"meta":213,"style":213},"project\u002F\n├── server\u002F\n└── client\u002F\n",[215,311,312,317,322],{"__ignoreMap":213},[218,313,314],{"class":220,"line":221},[218,315,316],{},"project\u002F\n",[218,318,319],{"class":220,"line":227},[218,320,321],{},"├── server\u002F\n",[218,323,324],{"class":220,"line":233},[218,325,326],{},"└── client\u002F\n",[183,328,329],{},"The backend runtime is powered by NestJS.",[183,331,332],{},"The frontend runtime is powered by Nuxt.",[183,334,335],{},"Both runtimes share the same development philosophy and filesystem conventions.",[196,337,339],{"id":338},"generated-typings","Generated Typings",[183,341,342],{},"OpenSya generates typings automatically from runtime definitions and filesystem structures.",[183,344,345],{},"This provides:",[273,347,348,351,354,357],{},[276,349,350],{},"Strong type safety",[276,352,353],{},"Better IDE autocompletion",[276,355,356],{},"Shared runtime contracts",[276,358,359],{},"Improved developer experience",[253,361,364],{"color":362,"icon":363},"info","i-lucide-badge-check",[183,365,366],{},"Generated typings are a core part of the OpenSya developer experience.",[196,368,370],{"id":369},"modular-architecture","Modular Architecture",[183,372,373],{},"Applications are designed to be modular by default.",[183,375,376],{},"Controllers, services, database plugins and frontend integrations can evolve independently while remaining orchestrated by the runtime.",[183,378,379],{},"This makes large-scale recruitment and business applications easier to maintain and extend.",[196,381,383],{"id":382},"runtime-discovery","Runtime Discovery",[183,385,386],{},"OpenSya continuously discovers runtime definitions from the filesystem.",[183,388,389],{},"Examples:",[391,392,393,407],"table",{},[394,395,396],"thead",{},[397,398,399,404],"tr",{},[400,401,403],"th",{"align":402},"left","Directory",[400,405,406],{"align":402},"Purpose",[408,409,410,421,431,441,451],"tbody",{},[397,411,412,418],{},[413,414,415],"td",{},[215,416,417],{},"server\u002Fcontrollers",[413,419,420],{},"HTTP routes and controllers",[397,422,423,428],{},[413,424,425],{},[215,426,427],{},"server\u002Fservices",[413,429,430],{},"Business logic",[397,432,433,438],{},[413,434,435],{},[215,436,437],{},"server\u002Fdatabase\u002Fmodels",[413,439,440],{},"Database entities",[397,442,443,448],{},[413,444,445],{},[215,446,447],{},"client\u002Fpages",[413,449,450],{},"Frontend pages and routes",[397,452,453,458],{},[413,454,455],{},[215,456,457],{},"client\u002Fcomponents",[413,459,460],{},"Reusable UI components",[183,462,463],{},"The runtime uses these conventions to automatically build the application architecture.",[196,465,467],{"id":466},"scalability","Scalability",[183,469,470],{},"OpenSya is designed for scalable applications and infrastructures.",[183,472,473],{},"The architecture encourages:",[273,475,476,479,482,485,487],{},[276,477,478],{},"Separation of concerns",[276,480,481],{},"Reusable modules",[276,483,484],{},"Consistent structures",[276,486,356],{},[276,488,489],{},"Independent runtime evolution",[183,491,492],{},"This allows teams to scale applications without increasing configuration complexity.",[196,494,496],{"id":495},"philosophy","Philosophy",[183,498,499],{},"OpenSya is not a boilerplate generator.",[183,501,502],{},"It is a runtime architecture layer designed to standardize how modern recruitment and business applications are structured and orchestrated.",[183,504,505],{},"The core philosophy relies on:",[507,508,509,512,515,518],"ol",{},[276,510,511],{},"Filesystem conventions",[276,513,514],{},"Runtime orchestration",[276,516,517],{},"Generated types",[276,519,520],{},"Modular architecture",[183,522,523],{},"Together, these concepts create a predictable and maintainable developer experience across backend and frontend runtimes.",[525,526,527],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":213,"searchDepth":221,"depth":227,"links":529},[530,531,532,533,534,535,536,537],{"id":198,"depth":227,"text":199},{"id":264,"depth":227,"text":265},{"id":302,"depth":227,"text":303},{"id":338,"depth":227,"text":339},{"id":369,"depth":227,"text":370},{"id":382,"depth":227,"text":383},{"id":466,"depth":227,"text":467},{"id":495,"depth":227,"text":496},"Learn the core concepts behind the OpenSya runtime architecture.","md",null,{},{"icon":34},{"title":31,"description":538},"ZT4DU6B3D_0PrQWCE4ggsWs-WksHju6JKE0ITWeiyDU",[546,548],{"title":26,"path":27,"stem":28,"description":547,"icon":29,"children":-1},"Understand how OpenSya organizes and orchestrates modern fullstack recruitment platforms.",{"title":36,"path":37,"stem":38,"description":549,"icon":39,"children":-1},"Understand how the OpenSya runtime orchestrates backend and frontend applications.",1779143767265]