← Back to Hub
01 / 08
Development Infrastructure

Our AI-First
Coding Stack

A structured approach to AI-assisted development — where we define the problems and the agent executes the solutions. We stay in control of every decision.

3
Teams — Backend · Frontend · Mobile
2
Instruction layers — Global + Project
1
Source of truth — Shared submodule repo
Backend
NestJS · MongoDB
Frontend
React · TypeScript
Mobile
Flutter · Dart
02 / 08
Core Philosophy

We Code Faster,
With More Control

We still own every line of code. The agent handles the repetitive execution — we focus on the thinking, the architecture, and the decisions that matter.

We Write Specs, Not Boilerplate
We invest time in precise requirements. The agent transforms our specs into working code — no scaffolding, no repetitive setup.
Plan Before Execute
The agent always proposes a plan first. No file is touched until we explicitly approve the approach.
We Review Every Step
Execution happens one atomic step at a time. We review each change before the next begins — full visibility, no surprises.
Context Always Ready
Shared instructions give the agent our stack and process context automatically. No manual setup, no repeated prompting.
03 / 08
Repository Architecture

One Source,
All Projects

Global instructions live in a dedicated repo and flow into every project as a git submodule. Each project adds its own layer on top.

📦
org/copilot-instructions
Shared
📁 backend/
📄 instructions.md
📁 frontend/
📄 instructions.md
📁 mobile/
📄 instructions.md
git submodule
🗂️
org/any-project
Template
📁 .github/instructions/
📁 global/ ← submodule
📁 project/
📄 instructions.md
📁 .vscode/
📄 settings.json
📁 specs/
📁 feature-group/
📄 feature-name.md
📁 src/
🚚
org/tracking-service
Sample
📁 .github/instructions/
📁 global/ ← submodule
📁 backend/
📄 instructions.md
📁 project/
📄 instructions.md
📁 .vscode/
📄 settings.json
📁 specs/
📁 users/
📄 user-registration.md
📄 user-authentication.md
📁 shipments/
📄 shipment-creation.md
📄 shipment-tracking.md
📄 shipment-status-update.md
📁 src/
📁 users/
📁 shipments/
AUTO-LOADED IN VS CODE
The committed .vscode/settings.json wires all instruction files into Copilot automatically on clone. Zero manual setup.
04 / 08
Development Flow

Our Core
Loop

1
We Write the Spec
We write a focused spec file — what the feature does, the business logic, rules, and edge cases. No technical details. Committed to specs/.
Our Team
2
Agent Reads Our Context
Copilot loads the spec + global instructions + project instructions as one unified context. It knows our stack, our domain, and the feature — no extra prompting needed.
Agent
3
Agent Proposes a Plan
Before touching any file, the agent outputs a complete step-by-step plan. Every file to create or modify is listed explicitly. We read it in full.
Agent
4
We Approve the Plan
We validate the approach, adjust if needed, and give explicit approval. Nothing is executed until we say so.
Our Team
5
Agent Executes, We Review Each Step
One atomic change at a time. Each step shows a diff. We review and approve before the next step begins — full control throughout execution.
Agent + Our Team
6
CI Validates
Type check, linting, and tests run automatically. Hard gates enforce what our instructions guide.
Automated
05 / 08
Specs

What Our
Specs Cover

Specs are business-focused. We describe what a feature does — not how it's built. The agent figures out the technical implementation from our instructions.

Backend Spec
NestJS · MongoDB
Feature
What is being built
Business Logic
What the feature does, step by step
Rules
Validations, constraints, conditions
Edge Cases
What can go wrong, how to handle it
Out of Scope
Explicit exclusions for the agent
Frontend Spec
React · TypeScript
Feature
What is being built
User Flow
What the user sees and does
States
Loading · Error · Empty · Success
Rules
Business constraints on the UI
Out of Scope
Explicit exclusions for the agent
Mobile Spec
Flutter · Dart
Feature
What is being built
User Flow
Screen-by-screen description
States
Loading · Error · Empty · Success
Rules
Business constraints on the flow
Out of Scope
Explicit exclusions for the agent
Specs live in the repo under specs/, committed and versioned with the code. No endpoints, no module names, no DTOs — that belongs in our instructions. The out-of-scope field is critical: it prevents the agent from touching anything outside the defined boundaries.
06 / 08
Responsibilities & Enforcement

Our Team
vs The Agent

Our Team
Writes and commits the feature spec
Approves the agent's execution plan
Reviews each step diff before proceeding
Owns and evolves project instructions
Proposes changes to global instructions
Copilot Agent
Reads global + project + spec as unified context
Proposes a complete plan before any execution
Executes one step at a time, shows diff
Waits for our approval between each step
Never touches files outside the spec scope
CI Pipeline — Hard Enforcement
🔍
Type Check
tsc strict mode
📐
Lint
ESLint / Biome
🧪
Tests
Jest / Vitest / Flutter
🔗
Submodule
Instructions not stale
Key principle: Our instructions guide the agent. CI enforces the outcome. Both must always agree.
07 / 08
Tracking Service — Sample Project

Instructions &
Specs in Practice

How our three layers look for a real project — the Tracking Service backend with Users and Shipments modules.

📄
.github/instructions/global/backend/instructions.md
Global
# Global Backend Instructions

## Stack
- NestJS — TypeScript strict
- MongoDB with Mongoose
- Jest for testing
- REST API with versioning

## Architecture
- Feature-based module structure
- One module per domain
- Repository pattern for data access
- DTO-based input/output contracts

## Agent Behavior
- Always output a step-by-step plan before writing any code
- Wait for explicit approval before starting execution
- Execute one step at a time, show the diff, wait before proceeding
- Never modify files outside the scope defined in the spec
- If something in the spec is ambiguous, ask before assuming

## Process
- All features start from a spec
- CI must pass before merge
📄
.github/instructions/project/instructions.md
Project
# Project: Tracking Service
A logistics backend — manages users and tracks shipments end to end.

## Modules
- Users — registration, authentication, profile
- Shipments — creation, tracking, status lifecycle

## Domain Rules
- Every shipment belongs to a user
- Shipment status follows a strict lifecycle
- All timestamps in UTC
- Soft delete across all collections

## Shipment Status Lifecycle
pending → picked_up → in_transit → out_for_delivery → delivered
- Status cannot go backwards
- Cancellation allowed from pending or picked_up only

## Collections
- users
- shipments
- shipment_events

## Environment
- MongoDB Atlas
- JWT authentication — RS256
- Secrets via environment variables
📄
specs/users/user-registration.md
Spec
## Feature: User Registration

### Business Logic
- A user registers with full name, email, password
- Email must be unique across the system
- On success, user receives a confirmation email
- Account is inactive until email is confirmed

### Rules
- Duplicate email returns a clear business error
- Unconfirmed accounts cannot log in
- Registration is open — no invite required

### Edge Cases
- Registering with an already confirmed email
- Re-registering with an unconfirmed email
  → resend confirmation, do not create duplicate
📄
specs/users/user-authentication.md
Spec
## Feature: User Authentication

### Business Logic
- A confirmed user logs in with email and password
- On success, receives access token and refresh token
- Access token has a short lifespan
- Refresh token allows silent renewal without re-login
- Logout invalidates the refresh token

### Rules
- Unconfirmed accounts rejected with a clear message
- Wrong credentials do not reveal which field is wrong
- Refresh token is single-use — rotates on each renewal

### Edge Cases
- Using an already-rotated refresh token
  → invalidate the entire session
📄
specs/shipments/shipment-creation.md
Spec
## Feature: Shipment Creation

### Business Logic
- Authenticated user creates a shipment with
  origin, destination, and package details
- A unique tracking number is generated automatically
- Shipment starts in "pending" status
- A shipment event is recorded at creation

### Rules
- Origin and destination cannot be identical
- Package weight and dimensions are required
- Tracking number must be human-readable and unique

### Edge Cases
- Creating a shipment with an invalid address format
- Concurrent creation requests from the same user
📄
specs/shipments/shipment-status-update.md
Spec
## Feature: Shipment Status Update

### Business Logic
- System updates a shipment status as it moves
  through the logistics pipeline
- Each update creates a new shipment event
- Lifecycle:
  pending → picked_up → in_transit
  → out_for_delivery → delivered
- Cancellation: pending or picked_up only

### Rules
- Status cannot go backwards
- Skipping a lifecycle step is not allowed
- Delivered shipments cannot be updated further
- Every status change must include a location

### Edge Cases
- Attempting an invalid status transition
- Updating an already delivered shipment
- Cancelling from an ineligible status
08 / 08
We Architect. We Decide.
The Agent
Builds.

We move faster without losing quality or control. Our value as a team is in the thinking, the architecture, and the decisions — not in writing boilerplate.

Shared Submodule
Global + Project Instructions
Business-Focused Specs
Plan → Approve → Execute
CI Enforced