Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .opencode/plans/08-07-2026/17-09_setup-biomejs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Setup Biome.js

## Context

The project has zero linting or formatting tooling — no ESLint, no Prettier, no Biome. Adding Biome brings both linting and formatting in a single fast tool, with native Bun support and zero-config setup.

## Current State

- 6-package Bun workspace monorepo (`apps/api`, `apps/ui`, `packages/{business,cache,common,database}`)
- TypeScript `strict` mode as the only code quality measure
- No `lint`/`format` scripts anywhere
- No `.editorconfig`, no `.vscode/settings.json`

## Target State

- `@biomejs/biome` installed as root devDependency
- `biome.json` at root with sensible defaults
- Root scripts: `lint`, `format`, `check`
- All existing code formatted on first run

## Implementation Steps

1. **Install Biome** — `bun add -D -E @biomejs/biome` at root
2. **Generate config** — `bunx --bun @biomejs/biome init` → creates `biome.json`
3. **Tweak `biome.json`** — set `indentStyle: space`, `quoteStyle: single`, `lineWidth: 100`, add `files.ignoreUnknown: true`, ignore generated/prisma and dist dirs
4. **Add root scripts** to root `package.json`:
- `"lint": "biome lint"`
- `"lint:fix": "biome lint --write"`
- `"format": "biome format --write"`
- `"check": "biome check --write"`
5. **Add `.vscode/settings.json`** recommending Biome extension & setting it as default formatter
6. **Run `bun run check`** — initial format + lint pass across the whole codebase

## Key Considerations

- **Version pinning** — use `-E` to pin Biome version (per Biome docs, pinned versions are important)
- **No `bunfig.toml` change needed** — Biome is standalone
- **Risk:** Initial `biome check --write` will touch many files. Review the diff before committing.
- **CI**: Can add `biome ci` to the GitHub Actions workflow as a follow-up

## Verification Checklist

- [ ] `bun run lint` passes with zero errors
- [ ] `bun run format` formats without errors
- [ ] `bun run check` succeeds
- [ ] `bun run test` still passes after formatting changes
4 changes: 2 additions & 2 deletions .opencode/skills/propose-plan/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ Present the plan and ask:
If the user approves and asks to save the plan:

1. Get current timestamp: `date +"%d-%m-%Y-%H-%M"`
2. Create the plan file at `.opencode/plans/<dd-mm-yyyy-hh-mm>_<plan_name>.md`
2. Create the plan file at `.opencode/plans/<dd-mm-yyyy>/hh-mm_<plan_name>.md`
3. Use the plan content from Phase 3 as the file content
4. Confirm the file was created

Expand Down Expand Up @@ -138,6 +138,6 @@ Does this plan look good? Should I proceed, or would you like any changes?

User: Looks good, save the plan

Agent: [Creates .opencode/plans/08-07-2026-15-30_mysql-to-postgresql-migration.md]
Agent: [Creates .opencode/plans/08-07-2026/15-30_mysql-to-postgresql-migration.md]
Plan saved. Ready to implement when you are.
```
4 changes: 4 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Dashbore — AGENTS.md

> **Pull request and issue creation MUST follow templates in `.github/` — this is CRITICAL.**

> **When using the `propose-plan` skill, the plan path MUST follow `plans/<dd-mm-yyyy>/hh-mm_<name>.md` — this is HIGH.**

> Detailed project documentation lives in `docs/`. Read the relevant file
> before making changes to a workspace.

Expand Down
119 changes: 40 additions & 79 deletions apps/ui/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,127 +8,88 @@
// You should NOT make any changes in this file as it will be overwritten.
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.

// Import Routes
import { Route as rootRouteImport } from './routes/__root'
import { Route as HomeRouteImport } from './routes/home'
import { Route as IndexRouteImport } from './routes/index'
import { Route as DashboardIndexRouteImport } from './routes/dashboard/index'

import { Route as rootRoute } from './routes/__root'
import { Route as HomeImport } from './routes/home'
import { Route as IndexImport } from './routes/index'
import { Route as DashboardIndexImport } from './routes/dashboard/index'

// Create/Update Routes

const HomeRoute = HomeImport.update({
const HomeRoute = HomeRouteImport.update({
id: '/home',
path: '/home',
getParentRoute: () => rootRoute,
getParentRoute: () => rootRouteImport,
} as any)

const IndexRoute = IndexImport.update({
const IndexRoute = IndexRouteImport.update({
id: '/',
path: '/',
getParentRoute: () => rootRoute,
getParentRoute: () => rootRouteImport,
} as any)

const DashboardIndexRoute = DashboardIndexImport.update({
const DashboardIndexRoute = DashboardIndexRouteImport.update({
id: '/dashboard/',
path: '/dashboard/',
getParentRoute: () => rootRoute,
getParentRoute: () => rootRouteImport,
} as any)

// Populate the FileRoutesByPath interface

declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/': {
id: '/'
path: '/'
fullPath: '/'
preLoaderRoute: typeof IndexImport
parentRoute: typeof rootRoute
}
'/home': {
id: '/home'
path: '/home'
fullPath: '/home'
preLoaderRoute: typeof HomeImport
parentRoute: typeof rootRoute
}
'/dashboard/': {
id: '/dashboard/'
path: '/dashboard'
fullPath: '/dashboard'
preLoaderRoute: typeof DashboardIndexImport
parentRoute: typeof rootRoute
}
}
}

// Create and export the route tree

export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/home': typeof HomeRoute
'/dashboard': typeof DashboardIndexRoute
'/dashboard/': typeof DashboardIndexRoute
}

export interface FileRoutesByTo {
'/': typeof IndexRoute
'/home': typeof HomeRoute
'/dashboard': typeof DashboardIndexRoute
}

export interface FileRoutesById {
__root__: typeof rootRoute
__root__: typeof rootRouteImport
'/': typeof IndexRoute
'/home': typeof HomeRoute
'/dashboard/': typeof DashboardIndexRoute
}

export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths: '/' | '/home' | '/dashboard'
fullPaths: '/' | '/home' | '/dashboard/'
fileRoutesByTo: FileRoutesByTo
to: '/' | '/home' | '/dashboard'
id: '__root__' | '/' | '/home' | '/dashboard/'
fileRoutesById: FileRoutesById
}

export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
HomeRoute: typeof HomeRoute
DashboardIndexRoute: typeof DashboardIndexRoute
}

declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/home': {
id: '/home'
path: '/home'
fullPath: '/home'
preLoaderRoute: typeof HomeRouteImport
parentRoute: typeof rootRouteImport
}
'/': {
id: '/'
path: '/'
fullPath: '/'
preLoaderRoute: typeof IndexRouteImport
parentRoute: typeof rootRouteImport
}
'/dashboard/': {
id: '/dashboard/'
path: '/dashboard'
fullPath: '/dashboard/'
preLoaderRoute: typeof DashboardIndexRouteImport
parentRoute: typeof rootRouteImport
}
}
}

const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
HomeRoute: HomeRoute,
DashboardIndexRoute: DashboardIndexRoute,
}

export const routeTree = rootRoute
export const routeTree = rootRouteImport
._addFileChildren(rootRouteChildren)
._addFileTypes<FileRouteTypes>()

/* ROUTE_MANIFEST_START
{
"routes": {
"__root__": {
"filePath": "__root.tsx",
"children": [
"/",
"/home",
"/dashboard/"
]
},
"/": {
"filePath": "index.tsx"
},
"/home": {
"filePath": "home.tsx"
},
"/dashboard/": {
"filePath": "dashboard/index.tsx"
}
}
}
ROUTE_MANIFEST_END */
7 changes: 0 additions & 7 deletions opencode.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,6 @@
},

"snapshot": true,

"permission": {
"edit": "allow",
"write": "allow",
"bash": "ask"
},

"compaction": {
"auto": true,
"prune": false,
Expand Down
Loading