Thanks for taking the time to contribute! This document explains how to get involved — from reporting bugs to submitting pull requests.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Project Conventions
- Testing
- Pull Request Checklist
Please read CODE_OF_CONDUCT.md before participating. We expect all contributors to follow it.
Before opening an issue, please:
- Search existing issues to avoid duplicates.
- Confirm the bug is reproducible on the latest
mainbranch.
When you open an issue, include:
- A clear, descriptive title
- Steps to reproduce the problem
- What you expected vs. what actually happened
- Node.js version (
node -v), OS, and browser (if frontend) - Relevant console output or error messages
For security vulnerabilities, do not open a public issue — see SECURITY.md instead.
Open an issue with the label enhancement and describe:
- The problem you are trying to solve
- Your proposed solution
- Any alternative approaches you considered
Feature discussions are welcome before any code is written.
- Fork the repository and create your branch from
main. - Make your changes — keep them focused and minimal.
- Ensure
pnpm run typecheckpasses with no errors. - Run
pnpm exec prettier --check .and fix any formatting issues. - Update documentation (README, inline comments) if your change affects behaviour or setup.
- Open a pull request against
mainwith a clear description of what changed and why.
PRs that include unrelated changes, massive reformatting, or no description will be asked to revise before review.
- Node.js 24+
- pnpm 9+ (
npm install -g pnpm) - A PostgreSQL database — Neon free tier works great
# 1 — Fork and clone
git clone https://github.com/YOUR_USERNAME/wolfXvcf.git
cd wolfXvcf
# 2 — Install dependencies
pnpm install
# 3 — Set up environment variables
cp .env.example .env # create this file if it doesn't exist yet
# Then edit .env:
# DATABASE_URL=postgresql://...
# SUPER_ADMIN_EMAIL=admin@example.com
# SUPER_ADMIN_PASSWORD=supersecret
# 4 — Run DB migrations (creates tables + seeds Free plan)
node lib/db/migrate.mjs
# 5 — Start dev servers (two terminals)
pnpm --filter @workspace/api-server run dev # Express API → http://localhost:8080
pnpm --filter @workspace/vcf-card run dev # React SPA → http://localhost:5173The Vite dev server proxies all /api requests to :8080 automatically.
| Type | Pattern | Example |
|---|---|---|
| Bug fix | fix/<short-description> |
fix/duplicate-phone-check |
| Feature | feat/<short-description> |
feat/csv-export |
| Docs | docs/<short-description> |
docs/update-readme |
| Refactor | refactor/<short-description> |
refactor/auth-middleware |
| Chore | chore/<short-description> |
chore/update-deps |
Work directly on a feature branch, never on main.
Follow Conventional Commits:
<type>(<scope>): <short summary>
[optional body]
[optional footer]
Types: feat, fix, docs, style, refactor, test, chore
Examples:
feat(dashboard): add CSV export button
fix(public-card): prevent VCF download before target reached
docs(readme): update API route table
chore: upgrade drizzle-orm to 0.45.x
Keep the subject line under 72 characters. Use the body to explain why, not what.
- Every package extends
tsconfig.base.jsonwithcomposite: true. - Run
pnpm run typecheckfrom the root before pushing. This checks all packages. - Do not use
anyunless absolutely necessary — preferunknownand narrow the type. - New API route handlers must include request/response types.
- Formatter: Prettier (config in root
package.json). Runpnpm exec prettier --write .before committing. - Imports: Use workspace aliases (
@workspace/db,@/components/...) — no relative../../chains. - Env vars: Always read via
process.env["KEY"](bracket notation), never via dot notation, to satisfy TypeScript strict checks. - Error handling: All Express route handlers must wrap DB calls in try/catch and return a typed JSON error response.
There is currently no automated test suite. If you are adding a significant feature:
- Manually verify it works end-to-end in local dev
- Include testing steps in your PR description so reviewers can verify
- If you want to add tests, open an issue first to discuss the approach
Before requesting review, confirm the following:
-
pnpm run typecheckpasses with zero errors -
pnpm exec prettier --check .shows no formatting issues - The change is limited in scope to what's described in the PR
- Any new env vars are documented in the README
- Any new API routes are listed in the README route table
- Breaking changes are clearly labelled in the PR description
- No secrets, keys, or personal data are included in the diff
Open a GitHub Discussion or drop a message in the WhatsApp Group.