@venizia/ignis-docs 0.0.3 → 0.0.4-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +1 -1
  2. package/package.json +4 -2
  3. package/wiki/best-practices/api-usage-examples.md +591 -0
  4. package/wiki/best-practices/architectural-patterns.md +415 -0
  5. package/wiki/best-practices/architecture-decisions.md +488 -0
  6. package/wiki/{get-started/best-practices → best-practices}/code-style-standards.md +406 -17
  7. package/wiki/{get-started/best-practices → best-practices}/common-pitfalls.md +109 -4
  8. package/wiki/{get-started/best-practices → best-practices}/contribution-workflow.md +34 -7
  9. package/wiki/best-practices/data-modeling.md +376 -0
  10. package/wiki/best-practices/deployment-strategies.md +698 -0
  11. package/wiki/best-practices/index.md +27 -0
  12. package/wiki/best-practices/performance-optimization.md +196 -0
  13. package/wiki/best-practices/security-guidelines.md +218 -0
  14. package/wiki/{get-started/best-practices → best-practices}/troubleshooting-tips.md +97 -1
  15. package/wiki/changelogs/2025-12-16-initial-architecture.md +1 -1
  16. package/wiki/changelogs/2025-12-16-model-repo-datasource-refactor.md +1 -1
  17. package/wiki/changelogs/2025-12-17-refactor.md +1 -1
  18. package/wiki/changelogs/2025-12-18-performance-optimizations.md +5 -5
  19. package/wiki/changelogs/2025-12-18-repository-validation-security.md +13 -7
  20. package/wiki/changelogs/2025-12-26-nested-relations-and-generics.md +2 -2
  21. package/wiki/changelogs/2025-12-29-dynamic-binding-registration.md +104 -0
  22. package/wiki/changelogs/2025-12-29-snowflake-uid-helper.md +100 -0
  23. package/wiki/changelogs/2025-12-30-repository-enhancements.md +214 -0
  24. package/wiki/changelogs/2025-12-31-json-path-filtering-array-operators.md +214 -0
  25. package/wiki/changelogs/2025-12-31-string-id-custom-generator.md +137 -0
  26. package/wiki/changelogs/2026-01-02-default-filter-and-repository-mixins.md +418 -0
  27. package/wiki/changelogs/index.md +6 -0
  28. package/wiki/changelogs/planned-schema-migrator.md +0 -8
  29. package/wiki/{get-started/core-concepts → guides/core-concepts/application}/bootstrapping.md +18 -5
  30. package/wiki/{get-started/core-concepts/application.md → guides/core-concepts/application/index.md} +47 -104
  31. package/wiki/guides/core-concepts/components-guide.md +509 -0
  32. package/wiki/{get-started → guides}/core-concepts/components.md +24 -17
  33. package/wiki/{get-started → guides}/core-concepts/controllers.md +30 -13
  34. package/wiki/{get-started → guides}/core-concepts/dependency-injection.md +97 -0
  35. package/wiki/guides/core-concepts/persistent/datasources.md +179 -0
  36. package/wiki/guides/core-concepts/persistent/index.md +119 -0
  37. package/wiki/guides/core-concepts/persistent/models.md +241 -0
  38. package/wiki/guides/core-concepts/persistent/repositories.md +219 -0
  39. package/wiki/guides/core-concepts/persistent/transactions.md +170 -0
  40. package/wiki/{get-started → guides}/core-concepts/services.md +26 -3
  41. package/wiki/{get-started → guides/get-started}/5-minute-quickstart.md +59 -14
  42. package/wiki/guides/get-started/philosophy.md +682 -0
  43. package/wiki/guides/get-started/setup.md +157 -0
  44. package/wiki/guides/index.md +89 -0
  45. package/wiki/guides/reference/glossary.md +243 -0
  46. package/wiki/{get-started → guides/reference}/mcp-docs-server.md +0 -10
  47. package/wiki/{get-started → guides/tutorials}/building-a-crud-api.md +134 -132
  48. package/wiki/{get-started/quickstart.md → guides/tutorials/complete-installation.md} +107 -71
  49. package/wiki/guides/tutorials/ecommerce-api.md +1399 -0
  50. package/wiki/guides/tutorials/realtime-chat.md +1261 -0
  51. package/wiki/guides/tutorials/testing.md +723 -0
  52. package/wiki/index.md +176 -37
  53. package/wiki/references/base/application.md +27 -0
  54. package/wiki/references/base/bootstrapping.md +30 -26
  55. package/wiki/references/base/components.md +24 -7
  56. package/wiki/references/base/controllers.md +51 -20
  57. package/wiki/references/base/datasources.md +30 -0
  58. package/wiki/references/base/dependency-injection.md +39 -3
  59. package/wiki/references/base/filter-system/application-usage.md +224 -0
  60. package/wiki/references/base/filter-system/array-operators.md +132 -0
  61. package/wiki/references/base/filter-system/comparison-operators.md +109 -0
  62. package/wiki/references/base/filter-system/default-filter.md +428 -0
  63. package/wiki/references/base/filter-system/fields-order-pagination.md +155 -0
  64. package/wiki/references/base/filter-system/index.md +127 -0
  65. package/wiki/references/base/filter-system/json-filtering.md +197 -0
  66. package/wiki/references/base/filter-system/list-operators.md +71 -0
  67. package/wiki/references/base/filter-system/logical-operators.md +156 -0
  68. package/wiki/references/base/filter-system/null-operators.md +58 -0
  69. package/wiki/references/base/filter-system/pattern-matching.md +108 -0
  70. package/wiki/references/base/filter-system/quick-reference.md +431 -0
  71. package/wiki/references/base/filter-system/range-operators.md +63 -0
  72. package/wiki/references/base/filter-system/tips.md +190 -0
  73. package/wiki/references/base/filter-system/use-cases.md +452 -0
  74. package/wiki/references/base/index.md +90 -0
  75. package/wiki/references/base/middlewares.md +602 -0
  76. package/wiki/references/base/models.md +215 -23
  77. package/wiki/references/base/providers.md +732 -0
  78. package/wiki/references/base/repositories/advanced.md +555 -0
  79. package/wiki/references/base/repositories/index.md +228 -0
  80. package/wiki/references/base/repositories/mixins.md +331 -0
  81. package/wiki/references/base/repositories/relations.md +486 -0
  82. package/wiki/references/base/repositories.md +40 -635
  83. package/wiki/references/base/services.md +28 -4
  84. package/wiki/references/components/authentication.md +22 -2
  85. package/wiki/references/components/health-check.md +12 -0
  86. package/wiki/references/components/index.md +23 -0
  87. package/wiki/references/components/mail.md +687 -0
  88. package/wiki/references/components/request-tracker.md +16 -0
  89. package/wiki/references/components/socket-io.md +18 -0
  90. package/wiki/references/components/static-asset.md +14 -26
  91. package/wiki/references/components/swagger.md +17 -0
  92. package/wiki/references/configuration/environment-variables.md +427 -0
  93. package/wiki/references/configuration/index.md +73 -0
  94. package/wiki/references/helpers/cron.md +14 -0
  95. package/wiki/references/helpers/crypto.md +15 -0
  96. package/wiki/references/helpers/env.md +16 -0
  97. package/wiki/references/helpers/error.md +17 -0
  98. package/wiki/references/helpers/index.md +14 -0
  99. package/wiki/references/helpers/inversion.md +24 -4
  100. package/wiki/references/helpers/logger.md +19 -0
  101. package/wiki/references/helpers/network.md +11 -0
  102. package/wiki/references/helpers/queue.md +19 -0
  103. package/wiki/references/helpers/redis.md +21 -0
  104. package/wiki/references/helpers/socket-io.md +24 -5
  105. package/wiki/references/helpers/storage.md +18 -10
  106. package/wiki/references/helpers/testing.md +18 -0
  107. package/wiki/references/helpers/types.md +16 -0
  108. package/wiki/references/helpers/uid.md +167 -0
  109. package/wiki/references/helpers/worker-thread.md +16 -0
  110. package/wiki/references/index.md +177 -0
  111. package/wiki/references/quick-reference.md +634 -0
  112. package/wiki/references/src-details/boot.md +3 -3
  113. package/wiki/references/src-details/dev-configs.md +0 -4
  114. package/wiki/references/src-details/docs.md +2 -2
  115. package/wiki/references/src-details/index.md +86 -0
  116. package/wiki/references/src-details/inversion.md +1 -6
  117. package/wiki/references/src-details/mcp-server.md +3 -15
  118. package/wiki/references/utilities/index.md +86 -10
  119. package/wiki/references/utilities/jsx.md +577 -0
  120. package/wiki/references/utilities/request.md +0 -2
  121. package/wiki/references/utilities/statuses.md +740 -0
  122. package/wiki/get-started/best-practices/api-usage-examples.md +0 -266
  123. package/wiki/get-started/best-practices/architectural-patterns.md +0 -170
  124. package/wiki/get-started/best-practices/data-modeling.md +0 -177
  125. package/wiki/get-started/best-practices/deployment-strategies.md +0 -121
  126. package/wiki/get-started/best-practices/performance-optimization.md +0 -97
  127. package/wiki/get-started/best-practices/security-guidelines.md +0 -99
  128. package/wiki/get-started/core-concepts/persistent.md +0 -539
  129. package/wiki/get-started/index.md +0 -65
  130. package/wiki/get-started/philosophy.md +0 -296
  131. package/wiki/get-started/prerequisites.md +0 -113
@@ -1,8 +1,10 @@
1
- # Quickstart Guide
1
+ # Complete Installation
2
2
 
3
3
  This guide walks you through creating a new web application with Ignis and setting up a professional development environment.
4
4
 
5
- > **Prerequisites:** Ensure you have [Bun installed and basic TypeScript knowledge](./prerequisites.md) before starting.
5
+ **⏱️ Time to Complete:** ~20 minutes
6
+
7
+ > **Prerequisites:** Ensure you have [Bun installed and basic TypeScript knowledge](../get-started/setup.md) before starting.
6
8
 
7
9
  ## 1. Initialize Your Project
8
10
 
@@ -30,7 +32,7 @@ bun add hono @hono/zod-openapi @scalar/hono-api-reference @venizia/ignis dotenv-
30
32
  ### Development Dependencies
31
33
 
32
34
  ```bash
33
- bun add -d typescript @types/bun @venizia/dev-configs tsc-alias tsconfig-paths
35
+ bun add -d typescript @types/bun @venizia/dev-configs eslint prettier tsc-alias
34
36
  ```
35
37
 
36
38
  **What `@venizia/dev-configs` provides:**
@@ -108,38 +110,10 @@ export default eslintConfigs;
108
110
  > export default [...eslintConfigs, { rules: { 'no-console': 'warn' } }];
109
111
  > ```
110
112
 
111
- > **Deep Dive:** See [Code Style Standards](./best-practices/code-style-standards.md) for detailed configuration options.
112
-
113
- :::tip A Note on Setup for Express/Hono/Fastify Developers
114
- If you're coming from a minimal framework like Express, Hono, or Fastify, you might be thinking: "This is a lot of setup just to get started!"
115
-
116
- You're right—and it's intentional. Here's why:
117
-
118
- **In Express/Hono/Fastify, you might start with:**
119
- ```javascript
120
- const app = require('express')();
121
- app.get('/', (req, res) => res.json({ hello: 'world' }));
122
- app.listen(3000);
123
- ```
124
-
125
- That's 3 lines. Beautiful and fast.
113
+ > **Deep Dive:** See [Code Style Standards](/best-practices/code-style-standards) for detailed configuration options.
126
114
 
127
- **The problem comes later:**
128
- - Where do you put database logic?
129
- - How do you organize routes when you have 50+ endpoints?
130
- - How do you share code between routes?
131
- - How do you validate requests?
132
- - How do you generate API docs?
133
- - How do you test business logic in isolation?
134
-
135
- `Ignis` answers these questions upfront with:
136
- - **Type Safety (`tsconfig.json`):** Catches errors before they reach production
137
- - **Consistent Formatting (`.prettierrc.mjs`):** No more debates about code style in PRs
138
- - **Code Quality (`eslint.config.mjs`):** Prevents common bugs and enforces best practices
139
-
140
- **The trade-off:** You write 50-100 lines of config once. In return, you get a scalable architecture that handles projects with 10, 100, or 1000+ endpoints without becoming spaghetti code.
141
-
142
- If you're building a quick prototype or tiny API (< 5 endpoints), stick with plain Hono. But if your API will grow or be maintained by a team, this setup pays for itself within a week.
115
+ :::tip Coming from Express/Hono/Fastify?
116
+ This setup might seem verbose compared to minimal frameworks. The trade-off: ~50 lines of config upfront gives you scalable architecture for 10-1000+ endpoints without spaghetti code. For quick prototypes (< 5 endpoints), use plain Hono instead.
143
117
  :::
144
118
 
145
119
  ## 4. Build Your First Application
@@ -147,24 +121,48 @@ If you're building a quick prototype or tiny API (< 5 endpoints), stick with pla
147
121
  ### Create Project Structure
148
122
 
149
123
  ```bash
150
- mkdir -p src/controllers
124
+ mkdir -p src/{common,components,configurations,controllers,datasources,helpers,models/{entities,requests,responses},repositories,services,utilities}
151
125
  ```
152
126
 
153
127
  Your structure will look like:
154
128
  ```
155
129
  src/
156
- ├── application.ts
157
- ├── index.ts
158
- └── controllers/
159
- └── hello.controller.ts
130
+ ├── index.ts # Entry point
131
+ ├── application.ts # Application class
132
+ ├── common/
133
+ └── index.ts # Shared constants, types, bindings
134
+ ├── components/
135
+ │ └── index.ts # Reusable modules (auth, swagger, etc.)
136
+ ├── configurations/
137
+ │ └── index.ts # App configuration files
138
+ ├── controllers/
139
+ │ ├── index.ts # Export all controllers
140
+ │ └── hello.controller.ts
141
+ ├── datasources/
142
+ │ └── index.ts # Database connections
143
+ ├── helpers/
144
+ │ └── index.ts # Helper functions and classes
145
+ ├── models/
146
+ │ ├── index.ts # Export all models
147
+ │ ├── entities/ # Drizzle schema definitions
148
+ │ ├── requests/ # Request DTOs (Zod schemas)
149
+ │ └── responses/ # Response DTOs (Zod schemas)
150
+ ├── repositories/
151
+ │ └── index.ts # Data access layer
152
+ ├── services/
153
+ │ └── index.ts # Business logic
154
+ └── utilities/
155
+ └── index.ts # Utility functions
160
156
  ```
161
157
 
158
+ > **Note:** For this guide, we only use `controllers/`. Other folders will be used in the [CRUD Tutorial](./building-a-crud-api.md) when you add database support.
159
+
162
160
  ### Create Application Class
163
161
 
164
162
  Create `src/application.ts` - this is where you configure and register all your application resources:
165
163
 
166
164
  ```typescript
167
- import { BaseApplication, IApplicationConfigs, IApplicationInfo, ValueOrPromise } from '@venizia/ignis';
165
+ import { BaseApplication, IApplicationConfigs, IApplicationInfo, SwaggerComponent, ValueOrPromise } from '@venizia/ignis';
168
166
  import { HelloController } from './controllers/hello.controller';
169
167
  import packageJson from '../package.json';
170
168
 
@@ -178,7 +176,15 @@ export const appConfigs: IApplicationConfigs = {
178
176
  export class Application extends BaseApplication {
179
177
  // Required: Tell the framework about your app (used for API docs)
180
178
  override getAppInfo(): ValueOrPromise<IApplicationInfo> {
179
+ // Option 1: Read from package.json (recommended for consistency)
181
180
  return packageJson;
181
+
182
+ // Option 2: Static app info (if package.json doesn't have correct fields)
183
+ // return {
184
+ // name: 'my-app',
185
+ // version: '1.0.0',
186
+ // description: 'My Ignis application',
187
+ // };
182
188
  }
183
189
 
184
190
  // Hook 1: Configure static file serving (e.g., serve images from /public)
@@ -186,20 +192,31 @@ export class Application extends BaseApplication {
186
192
  // Example: this.static({ folderPath: './public' })
187
193
  }
188
194
 
189
- // Hook 2: Add global middlewares (CORS, compression, etc.)
190
- setupMiddlewares(): ValueOrPromise<void> {
191
- // Example: this.server.use(cors())
195
+ // Hook 2: Add global middlewares (CORS, etc.)
196
+ override async setupMiddlewares(): Promise<void> {
197
+ const server = this.getServer();
198
+ const { cors } = await import('hono/cors');
199
+
200
+ server.use('*', cors({
201
+ origin: '*',
202
+ allowMethods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE', 'OPTIONS'],
203
+ maxAge: 86_400,
204
+ credentials: true,
205
+ }));
192
206
  }
193
207
 
194
208
  // Hook 3: Register your resources (THIS IS THE MOST IMPORTANT ONE)
195
209
  preConfigure(): ValueOrPromise<void> {
210
+ // Register SwaggerComponent for API documentation at /doc/explorer
211
+ this.component(SwaggerComponent);
212
+
196
213
  // As your app grows, you'll add:
197
214
  // this.dataSource(PostgresDataSource); // Database connection
198
215
  // this.repository(UserRepository); // Data access layer
199
216
  // this.service(UserService); // Business logic
200
217
  // this.component(AuthComponent); // Auth setup
201
218
 
202
- // For now, just register our controller
219
+ // Register our controller
203
220
  this.controller(HelloController);
204
221
  }
205
222
 
@@ -210,6 +227,17 @@ export class Application extends BaseApplication {
210
227
  }
211
228
  ```
212
229
 
230
+ ::: info IApplicationInfo
231
+ **Required fields in `package.json`:**
232
+ - `name` — App name (shown in API docs title)
233
+ - `version` — App version (shown in API docs)
234
+ - `description` — App description (shown in API docs)
235
+
236
+ **No proper `package.json`?** Use static app info instead (see Option 2 in code above).
237
+
238
+ **Recommendation:** Read from `package.json` for consistency between app metadata and API docs.
239
+ :::
240
+
213
241
  **Key takeaway:** You'll mostly work in `preConfigure()` when building your app. The other hooks are there when you need them.
214
242
 
215
243
  **Application Lifecycle Hooks:**
@@ -221,7 +249,7 @@ export class Application extends BaseApplication {
221
249
  | `preConfigure()` | **Register resources** | **Main hook** - register controllers, services, etc. |
222
250
  | `postConfigure()` | Post-initialization | Optional - seed data, background jobs |
223
251
 
224
- > **Deep Dive:** See [Application Class Reference](./core-concepts/application.md) for detailed lifecycle documentation.
252
+ > **Deep Dive:** See [Application Class Reference](../core-concepts/application/) for detailed lifecycle documentation.
225
253
 
226
254
  ### Create Controller
227
255
 
@@ -231,7 +259,7 @@ Create `src/controllers/hello.controller.ts` - controllers handle HTTP requests
231
259
  import {
232
260
  BaseController,
233
261
  controller,
234
- get, // Import the 'get' decorator
262
+ api,
235
263
  HTTP,
236
264
  jsonContent,
237
265
  } from '@venizia/ignis';
@@ -248,9 +276,18 @@ export class HelloController extends BaseController {
248
276
  super({ scope: HelloController.name, path: BASE_PATH });
249
277
  }
250
278
 
251
- // The @get decorator defines a GET route at /api/hello/
252
- @get({
279
+ // Required: Override binding() to register routes or dependencies
280
+ override binding() {
281
+ // Option 1: Use bindRoute() or defineRoute() for programmatic route registration
282
+ // this.bindRoute({ method: 'get', path: '/programmatic', handler: this.myHandler });
283
+
284
+ // Option 2: Use @api decorator on methods (shown below) - recommended
285
+ }
286
+
287
+ // The @api decorator defines a route (prefer @api with method over @get/@post)
288
+ @api({
253
289
  configs: {
290
+ method: HTTP.Methods.GET,
254
291
  path: '/',
255
292
  // This 'responses' config does two things:
256
293
  // 1. Generates OpenAPI/Swagger documentation automatically
@@ -258,34 +295,31 @@ export class HelloController extends BaseController {
258
295
  responses: {
259
296
  [HTTP.ResultCodes.RS_2.Ok]: jsonContent({
260
297
  description: 'A simple hello message',
261
- schema: z.object({ message: z.string() }), // Zod schema for validation
298
+ schema: z.object({ message: z.string() }),
262
299
  }),
263
300
  },
264
301
  },
265
302
  })
266
303
  sayHello(c: Context) {
267
- // This looks just like Hono! Because it IS Hono under the hood.
268
304
  return c.json({ message: 'Hello, World!' }, HTTP.ResultCodes.RS_2.Ok);
269
305
  }
270
306
 
271
- // You can add more routes here:
272
- // @post({ configs: { ... } })
273
- // createSomething(c: Context) { ... }
274
-
275
- // For authenticated endpoints, add 'authStrategies' to the configs:
276
- // @get({ configs: { path: '/secure', authStrategies: [Authentication.STRATEGY_JWT] } })
277
- // secureMethod(c: Context) { /* ... */ }
278
-
279
- // For database CRUD operations, use ControllerFactory (covered in the CRUD tutorial)
307
+ // For authenticated endpoints, add 'authStrategies':
308
+ // @api({ configs: { method: HTTP.Methods.GET, path: '/secure', authStrategies: [Authentication.STRATEGY_JWT] } })
280
309
  }
281
310
  ```
282
311
 
283
- **Controller Decorators:**
284
- - `@controller` - Registers the class as a controller with a base path
285
- - `@get`, `@post`, `@put`, `@patch`, `@del` - Define HTTP endpoints
286
- - Zod schemas provide automatic validation and OpenAPI docs
312
+ **Controller Patterns:**
313
+
314
+ | Pattern | Description |
315
+ |---------|-------------|
316
+ | `@controller` | Registers the class as a controller with a base path |
317
+ | `@api` | Defines a route with `method` specified (recommended) |
318
+ | `@get`, `@post`, etc. | Shorthand decorators (also work) |
319
+ | `binding()` | Required override — use `bindRoute()` or `defineRoute()` for programmatic routes |
320
+ | Zod schemas | Provide automatic validation and OpenAPI docs |
287
321
 
288
- > **Deep Dive:** See [Controllers Reference](./core-concepts/controllers.md) for advanced routing patterns and validation.
322
+ > **Deep Dive:** See [Controllers Reference](../core-concepts/controllers.md) for advanced routing patterns and validation.
289
323
 
290
324
  ### Create Entry Point
291
325
 
@@ -324,17 +358,15 @@ Add common application scripts to your `package.json`:
324
358
  "prettier:fix": "bun run prettier:cli --write",
325
359
  "eslint": "eslint --report-unused-disable-directives .",
326
360
  "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
327
- "compile:linux": "bun build --compile --minify --sourcemap --target=bun-linux-x64 ./src/index.ts --outfile ./dist/my_app",
328
361
  "clean": "sh ./scripts/clean.sh",
329
362
  "rebuild": "bun run clean && bun run build",
330
- "migrate:dev": "NODE_ENV=development drizzle-kit push --config=src/migration.ts",
331
- "generate-migration:dev": "NODE_ENV=development drizzle-kit generate --config=src/migration.ts",
332
- "preserver:dev": "bun run rebuild",
333
363
  "server:dev": "NODE_ENV=development bun .",
334
364
  "server:prod": "NODE_ENV=production bun ."
335
365
  }
336
366
  ```
337
367
 
368
+ > **Note:** Database migration scripts (`migrate:dev`, `generate-migration:dev`) will be added in the [CRUD Tutorial](./building-a-crud-api.md) when you set up Drizzle ORM.
369
+
338
370
  Create a cleanup script at `scripts/clean.sh`:
339
371
 
340
372
  ```bash
@@ -367,6 +399,10 @@ Response:
367
399
  {"message":"Hello, World!"}
368
400
  ```
369
401
 
402
+ **View API Documentation:**
403
+
404
+ Open `http://localhost:3000/doc/explorer` to see interactive Swagger UI with your endpoints.
405
+
370
406
  Congratulations! You have successfully created and configured your first application with the `Ignis` framework.
371
407
 
372
408
  ## Continue Your Journey
@@ -376,7 +412,7 @@ Congratulations! You have successfully created and configured your first applica
376
412
  **Next steps:**
377
413
 
378
414
  1. **[Building a CRUD API](./building-a-crud-api.md)** - Add database, create full REST API with CRUD operations
379
- 2. **[Core Concepts](./core-concepts/application.md)** - Deep dive into application architecture
380
- 3. **[Best Practices](./best-practices/architectural-patterns.md)** - Learn recommended patterns and practices
415
+ 2. **[Core Concepts](../core-concepts/application/)** - Deep dive into application architecture
416
+ 3. **[Best Practices](/best-practices/architectural-patterns)** - Learn recommended patterns and practices
381
417
 
382
- > **Deep Dive:** See [API Usage Examples](./best-practices/api-usage-examples.md) for more routing patterns and controller techniques.
418
+ > **Deep Dive:** See [API Usage Examples](/best-practices/api-usage-examples) for more routing patterns and controller techniques.