Bamose

project-guidelines-example

2
0
# Install this skill:
npx skills add Bamose/everything-codex-cli --skill "project-guidelines-example"

Install specific skill from multi-skill repository

# Description

Example project-specific skill for the Ongize monorepo (Next.js + Cloudflare Workers + Drizzle).

# SKILL.md


name: project-guidelines-example
description: Example project-specific skill for the Ongize monorepo (Next.js + Cloudflare Workers + Drizzle).


Project Guidelines Skill (Ongize Example)

This is an example of a project-specific skill. Use this as a template for your own projects.

Based on the local Ongize monorepo.


When to Use

Reference this skill when working on the Ongize repo. Project skills contain:
- Architecture overview
- File structure
- Code patterns
- Testing and quality workflow
- Deployment workflow


Architecture Overview

Tech Stack:
- Monorepo: Turborepo + pnpm workspaces
- Frontend: Next.js 15 (App Router), React 19, TypeScript, Mantine, Tailwind 4
- Backend: Cloudflare Workers (Hono + Zod OpenAPI)
- Database: Neon Postgres with Drizzle ORM (Kysely for complex SQL)
- Auth: better-auth
- Background Jobs: Trigger.dev
- Tooling: Biome, TypeScript, Lefthook, Commitlint
- Deployment: OpenNext on Cloudflare (web/app) + Wrangler for API

Services:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Frontend (website)    β”‚    β”‚        Frontend (app)      β”‚
β”‚  Next.js + React + Mantine β”‚    β”‚  Next.js + React + Mantine β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚                                 β”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               API (Cloudflare)                  β”‚
β”‚         Hono + Zod OpenAPI + TypeScript         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚ Postgres (Neon)  β”‚
              β”‚ Drizzle + Kysely β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Other services: S3 (files), Resend (email), Twilio (SMS), Trigger.dev (jobs)

File Structure

ongize/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ website/            # Marketing site (Next.js)
β”‚   β”œβ”€β”€ app/                # Main product (Next.js)
β”‚   └── api/                # Cloudflare Workers API (Hono)
β”œβ”€β”€ packages/
β”‚   └── shared/             # Shared types, utilities, styles
β”œβ”€β”€ scripts/                # Tooling scripts (type generation, etc.)
β”œβ”€β”€ docs/                   # Documentation
β”œβ”€β”€ turbo.json              # Turbo pipelines
β”œβ”€β”€ pnpm-workspace.yaml     # Workspaces
└── biome.json              # Lint/format rules

Code Patterns

API Response Format (Hono)

interface ApiResponse<T> {
  success: boolean
  data?: T
  error?: string
}

app.get('/health', (c) => {
  const response: ApiResponse<{ status: string }> = {
    success: true,
    data: { status: 'ok' },
  }
  return c.json(response)
})

Database Access (Drizzle)

import { db } from '@/db'
import { users } from '@/db/schema'

// Typed query from schema
const rows = await db.select().from(users)

Frontend API Calls (TypeScript)

interface ApiResponse<T> {
  success: boolean
  data?: T
  error?: string
}

async function fetchApi<T>(
  endpoint: string,
  options?: RequestInit
): Promise<ApiResponse<T>> {
  try {
    const response = await fetch(endpoint, {
      ...options,
      headers: {
        'Content-Type': 'application/json',
        ...options?.headers,
      },
    })

    if (!response.ok) {
      return { success: false, error: `HTTP ${response.status}` }
    }

    return await response.json()
  } catch (error) {
    return { success: false, error: String(error) }
  }
}

Shared Types

Use packages/shared for cross-app types, utilities, and shared styles.


Testing and Quality

Quality checks:

pnpm lint
pnpm check-types

Type generation:

pnpm generate:types

E2E tests (when configured):

# Add Playwright config under apps/app when needed
pnpm --filter @ongize/app exec playwright test

Deployment Workflow

# Website (Next.js on Cloudflare)
pnpm --filter @ongize/website deploy

# App (Next.js on Cloudflare)
pnpm --filter @ongize/app deploy

# API (Cloudflare Workers)
pnpm --filter @ongize/api deploy

Environment Variables

  • Per-app .env files live under apps/app and apps/api.
  • Cloudflare bindings live in apps/*/wrangler.jsonc.
  • Do not commit secrets; use Cloudflare secrets or CI env vars.

Critical Rules

  1. Immutability over mutation
  2. TDD for new features and fixes
  3. 80%+ coverage target
  4. Many small files (200-400 lines typical)
  5. No console.log in production code
  6. Proper error handling with try/catch
  7. Input validation with Zod

  • coding-standards/ - General coding best practices
  • backend-patterns/ - API and database patterns
  • frontend-patterns/ - React and Next.js patterns
  • tdd-workflow/ - Test-driven development methodology

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.