Action + event pattern for AdonisJS. Actions are single-purpose classes with .handle(input); they never touch HttpContext and never call side-effect code (mail, notifications, transmit) directly — they emit a domain event and a listener wired in /start/events.ts runs the effect. Use when adding a new action, wiring a…
File uploads with derived variants in an AdonisJS app via @jrmc/adonis-attachment. @attachment() decorator on a Lucid model + converters config drives image resize/reformat (e.g. webp thumbnails). URLs are pre-computed on read via a model helper. Use when adding an upload field, changing a converter, testing…
RBAC + Bouncer pattern in an AdonisJS + Inertia app. Capabilities live in a PERMISSIONS const, role slugs in ROLES; a WithRoles mixin composes into User to expose hasPermission / hasRole / syncRoles; BasePolicy subclasses gate routes; the frontend consumes a typed useCan() prop. Escalation is protected in depth. Use…
Execute a git commit that follows semantic conventional-commits — type, optional scope, imperative subject in English under 70 chars, body explaining WHY. User-invoked via /git-commit or "/commit".
Locales are declared in config/i18n.ts (supportedLocales, defaultLocale, loaders). Translation JSON lives per module at app/ /resources/lang/ / .json. Keys are namespaced by module (common.layout.navMain.dashboard), so the file at app/common/resources/lang/en/common.json doesn't repeat common. inside — the loader adds…
Inertia + React 19 patterns in an AdonisJS app. Pages resolve from module dirs (app/ /ui/pages/), shared props flow from a middleware, forms use useForm + Tuyau urlFor for type-safe URLs, and modals go through a controller helper. Use when adding an Inertia page, writing a form, reading shared props, or wiring a route…
Layout shells in an AdonisJS + Inertia app. Instead of a runtime layout chooser, each context has its own purpose-built shell that coexists as a distinct React component. Every page picks its shell explicitly by import. Use when adding a new page (which shell to import), when adding a new area of the app (which shell…
Transactional email in an AdonisJS app — @adonisjs/mail classes extending BaseMail, MJML templates via a shared @email.layout component, and mailContext() for appName/appUrl. Never author raw HTML+CSS blocks. Use when adding a new email, editing an existing template, testing mail with mail.fake(), or wiring the SMTP…
Lucid migrations in this starter kit. Convention here is edit the existing create table.ts migration + run migration:fresh, not layering altertable migrations on top — this is a starter kit, no production data. Migration paths are declared per module in config/database.ts. app/core/database/schema.ts is auto-generated…
How to add a new module to this AdonisJS monorepo — prefer node ace make:module, which scaffolds and wires every touchpoint. User-invoked via /module-scaffolding when wiring a module by hand or adding a piece later.
In-app notifications + realtime SSE in an AdonisJS + Inertia app. Stack: @facteurjs/adonisjs for the notification classes and delivery channels + @adonisjs/transmit for the SSE transport. Notifications persist to Postgres and push to a per-user SSE channel. Bell + unread badge in the logged-in shell. Emission goes…
Read-only query patterns in an AdonisJS + Inertia app — two flavors. List queries for CRUD tables (Lucid paginator with search + filter + sort). Read models for aggregate screens (dashboards, reports) with one query per business concept composed by the controller. Types live in the query file and cross to the frontend…
Route definitions in an AdonisJS module. Prefer router.resource(...) for CRUD verbs; put verb-only actions (activate, publish, finalize) as separate router.post/get/delete(...). Always pin numeric params with router.matchers.number() — otherwise a non-numeric URL falls through to the controller and blows up on the…
Japa test patterns for an AdonisJS app. Functional specs hit real Postgres wrapped in per-test transactions; unit specs stub deps with sinon. Fakes are mandatory for anything that reaches out (mail, drive, emitter, transmit). Trigger on: "write test", "add spec", "cover with tests", "how do we test X", "mock", "fake"…
★not rated 95▲
+1 26d agoA82 tokens
originalMIT
At most 3 mods per repository are shown here, and a mod shipped inside a plugin is left to that plugin's page — the rest are on their repository pages: