Developer Onboarding Guide
Developer Onboarding GuideGuide: Drop — Fintech Payment App
Project:
{{PROJECT_NAME}}Drop — Remittance + QR Payments Version:{{VERSION}}1.0 Date:{{DATE}}2026-02-23 Author:{{AUTHOR}}John (AI Director) Status:Draft | In Review |Approved Reviewers:{{REVIEWERS}}Alem Bašić (CEO)
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | Initial |
Welcome
Welcome to {{PROJECT_NAME}}Drop! This— remittance + QR payments for everyone in Scandinavia.
Drop is built by an AI-native team at ALAI Holding AS. Our team structure is unusual: John (AI Director, Claude Opus) coordinates Builder agents (Claude Sonnet) and Validator agents (Claude Sonnet, read-only). Alem Bašić (CEO) provides direction and final approvals.
If you are a new Builder or Validator agent joining a Drop task, this guide will helpget you gooriented fromquickly. zero to a fully working development environment and your first contribution.
If anything in this guide is unclear or out of date, please update it as you go — good documentation is a team responsibility. Your onboarding buddy is {{BUDDY}} — reach out to them anytime.go.
Your first weeksession at a glance:
DayStep 1: Read this guide +CLAUDE.mdin the project root- Step 2: Set up
yourlocal environmentand(Sectionget2)the+appverifyrunningtestslocallypass DayStep2-3: Read the architectureoverview,overviewexplore(Sectionthe codebase4)DayStep4-5:4:WorkPickthroughup yourfirstassignedsmallMissionticketControlwith your buddy's guidancetask
1. Prerequisites
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | ||
| RAM | ||
| Disk | SSD with |
|
| OS | macOS |
Accounts You Need
| Account | Why | How to Get Access |
|---|---|---|
| GitHub |
Code repository | Ask |
vault.basicconsulting.no) |
||
| Team communication | Ask |
|
node ~/) |
Expected setup time for all accounts: {{ACCOUNT_SETUP_TIME}}1 days
Access Requests
2. Development Environment Setup
2.1 macOS Setup
# Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install requiredNode.js tools
brew install {{TOOLS_LIST}}
# e.g.: brew install git nodevia nvm docker kubectl terraform
# Install nvm (Node version manager)
brew install nvm
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc
source ~/.zshrc
# Install requiredNode 20 (Drop uses Next.js 16 which requires Node version20+)
nvm install {{NODE_VERSION}}20
nvm use {{NODE_VERSION}}20
nvm alias default {{NODE_VERSION}}20
2.2 Linux Setup
# Update package index
sudo apt update && sudo apt upgrade -y
# Install required tools
sudo apt install -y {{LINUX_TOOLS}}
# Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v{{NVM_VERSION}}/v0.39.7/install.sh | bash
source ~/.bashrc
# Install required Node version20
nvm install {{NODE_VERSION}}20
nvm use 20
2.3 Windows Setup
# Enable WSL2
wsl --install
# After WSL2 is set up, follow the Linux setup instructions inside WSL2
# Recommended: Use VS Code with Remote WSL extension
2.4 Required Software & Versions
| Software | Required Version | Install | |
|---|---|---|---|
| Node.js | |
nvm install |
|
| npm |
(included with Node 20) |
Included with Node | |
| Latest | | ||
| Latest | | ||
|
Check your versions:
node --version # Should be v{{NODE_VERSION}}v20.x.x
dockernpm --version # Should be {{DOCKER_VERSION}}+10.x.x
2.54 IDE Setup
Recommended IDE: {{IDE}}VS Code
Required extensions:
# VS Code — install all recommended extensions
code --install-extension {{EXTENSION_1}}
code --install-extension {{EXTENSION_2}}
code --install-extension {{EXTENSION_3}}
# OR: Open project in VS Code → "Install recommended extensions" prompt will appear
Recommended extensions:
| Extension | Purpose |
|---|---|
dbaeumer.vscode-eslint |
|
esbenp.prettier-vscode |
|
bradlc.vscode-tailwindcss |
|
ms-playwright.playwright |
Playwright test runner |
vitest.explorer |
Vitest test explorer |
2.65 Environment Variables
# Copy the example env file
cp src/drop-app/.env.example src/drop-app/.envenv.local
# Fill in your local values
# AskRetrieve yourfrom onboardingVaultwarden: buddyvault.basicconsulting.no
for# anyCLI: valuesbw markedget {{SECRET}}item "Drop Dev .env" --session $(cat /tmp/bw-session)
Key variables to set:variables:
| Variable | ||
|---|---|---|
DATABASE_URL |
(SQLite) |
|
|
||
NEXT_PUBLIC_SERVICE_MODE |
mock |
Always mock for local dev |
BCRYPT_ROUNDS |
10 |
Use 10 locally (faster); production uses 12 |
SUMSUB_API_KEY |
mock |
Mocked in dev |
BAAS_API_KEY |
mock |
Mocked in dev |
Never commit .env.local: It's in .gitignore.
3. Repository Setup
# Step 1: CloneNavigate theto repositoryDrop gitapp clone {{REPO_URL}}directory
cd {{REPO_NAME}}~/ALAI/products/Drop/src/drop-app
# Step 2: Install dependencies
{{INSTALL_CMD}} # npm install / yarn / pnpm install
# Step 3: Set up the database
{{DB_SETUP_CMD}} # e.g., npm run db:create &&
npm run db:migrate
# Step 4: Seed development data
{{SEED_CMD}} # e.g.,
npm run db:seed
# Step 5: Configure environment (see 2.6)5)
cp .env.example .envenv.local
# Edit .envenv.local with your values
# Step 6: Start the applicationdevelopment {{DEV_CMD}} # e.g.,server
npm run dev
# Step 7: Open the application
open http://localhost:{{PORT}}3000
# Expected: Drop landing page or login screen
4. Architecture Overview
High-level architecture: SeeDrop deployment-architecture.mdis a PSD2 pass-through fintech app — it NEVER holds customer money.
CRITICAL — Read Before Writing Any Code:
Drop uses an AISP/PISP pass-through model (ADR-003). The
userstable MUST NOT have abalancecolumn. Thecardstable MUST NOT havecard_numberorcvvcolumns. These are tested indb.test.tson every commit. Violating this is a P0 incident.
In brief:
- Frontend:
{{FRONTEND_STACK}}Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS —locatedin{{FRONTEND_DIR}}src/drop-app/ - Backend:
{{BACKEND_STACK}}Next.js API Routes (26 routes) —locatedin{{BACKEND_DIR}}src/drop-app/src/app/api/ - Database:
{{DB_ENGINE}}SQLite (dev) → PostgreSQL (Phase 1 production) — schema in{{SCHEMA_DIR}}src/drop-app/db/ - Key external services:
{{EXTERNAL_SERVICES}}Mock BaaS (AISP + PISP), Mock Sumsub KYC, exchange rates (static seed) - Deployment: Fly.io (Stockholm region) for backend; Vercel for landing page
- Auth: JWT in httpOnly cookie, SameSite=Strict, 7-day expiry; bcrypt 12 rounds
Codebase tour (key directories):
| Directory | Purpose |
|---|---|
|
|
|
|
|
|
|
|
src/drop-app/__tests__/ |
14 test files (unit, integration, performance, E2E) |
mockups/figma-make-export/ |
UI source of truth (10 screens — ALWAYS check here before UI changes) |
5. Key Documentation Links
| Document | Link | Purpose |
|---|---|---|
CLAUDE.md |
||
| API |
docs/backend/API-REFERENCE.md |
All 26 API |
docs/backend/DATABASE-SCHEMA.md |
||
| Architecture | project/architecture/drop-architecture.md |
System design, ADRs |
| Testing Guide | docs/testing/TESTING-GUIDE.md |
How to run Vitest + Playwright |
| Test Inventory | docs/testing/TEST-INVENTORY.md |
All 14 test files documented |
| Coding Standards | coding-standards.md | How we write code |
docs/templates-testing/definition-of-done.md |
||
project/docs/security-qa-audit.md |
||
ROADMAP.md |
6. Coding Standards Reference
Standards document: coding-standards.md
Quick reference:
- Language: TypeScript — strict mode, no
any - Commit messages: Conventional Commits format (
feat:,fix:,, etc.)docs:test: - Branch naming:
feature/MC-{{BRANCH_FORMAT}}(e.g.,feature/TICKET-123-task-id}-short-description) - PR size: Aim for <
{{PR_SIZE}}300 lines changed per PR Testing requirement:Testing:AllEveryPRsPRrequiremust include tests for new code- SQL: Parameterized queries ONLY — never string concatenation
- Passwords: bcrypt ONLY — SHA-256 is explicitly rejected in
auth.test.ts
7. Git Workflow & Branching Strategy
# Create a feature branch (aligned to Mission Control task)
git checkout -b feature/MC-{{TICKET}}task-id}-description
# Make changes, then commit using Conventional Commits
git add {{FILES}}src/drop-app/...
git commit -m "feat({{SCOPE}})auth): describeadd whatbcrypt yourounds did"configuration"
# Push your branch
git push origin feature/MC-{{TICKET}}task-id}-description
# Open a PR viato GitHub/GitLabmain UIbranch
Branching strategy: {{STRATEGY}} — see CI/CD Pipeline
PR requirements:
- Title follows
format:Conventional Commits:type(scope): description PRAlldescriptionVitestfilledtestsinpassing (templatenpm)auto-loaded)run testTestsTypeScriptincludedcompilesfor(npm)newruncodetype-checkCIESLintpipelinepassespassing(npm)beforerunrequesting reviewlintAtValidatorleast {{REVIEW_COUNT}} reviewer(s)agent approved (read-only review)
8. First PRTask Checklist
Your first PR goal: A small, low-risk change to confirm everything works end-to-end.
- Development environment running locally (
npm run devathttp://localhost:3000) -
CanTest suite passing:npm runthetestfull(40+testVitestsuite:testsall green){{TEST_CMD}} -
AllE2E testspassingpassing:locallynpx playwright test(3 projects) - Read
CLAUDE.mdin~/ALAI/products/Drop/— understand pass-through model - Read
docs/testing/TESTING-GUIDE.md— understand test structure - Mission Control task assigned and marked
in_progress - First
branchchangecreatedincludesfollowingappropriatenaming conventiontests -
ChangeDefinitionmadeof(startDonesmallchecklist—completedabeforedocmarkingfixtaskor minor improvement is perfect) Tests written for any logic changePR opened with filled descriptionCI pipeline passing on your PRReview requested from your onboarding buddyFirst PR merged 🎉done
9. Team Rituals & MeetingsCommunication
Drop uses an AI-native async workflow:
10. Communication Channels
| Channel | Purpose | |
|---|---|---|
Task coordination |
node ~/system/tools/mc.js) |
|
Technical decisions |
comms/decisions/ in the repo |
|
CEO updates |
||
Engineering |
||
Rule:No daily standups Default— toasync publicby channelsdefault. overJohn DMs.(AI QuestionsDirector) askedcoordinates invia channelsMission help the whole team.Control.
11.10. Key Contacts
| Role | Name | Contact | Help With |
|---|---|---|---|
| Tech Lead | |||
| QA Lead | |||
| CEO / Product Owner | Alem Bašić | [email protected] | Business decisions, UAT sign-off |
Related Documents
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | John (AI Director) | 2026-02-23 | Approved (AI) |
| John | 2026-02-23 | Approved | |
| Alem Bašić | TBD |