Overview
Aya uses a Make-based workflow with quality gates enforced at every step. All changes go through the same process: branch → develop → test → commit → pull request.Before starting: Ensure you have Deno, Go 1.22+, Docker, and Make installed. Run
make init in the project root to set up development tools.Development Setup
Initialize Project
Install tools, dependencies, and pre-commit hooks:This installs:
- Pre-commit hooks (runs linters automatically)
- Go tools:
sqlc,golangci-lint,mockery,air - Frontend dependencies via Deno
Start Development Environment
Start all services with Docker Compose:Services available:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8080
- PostgreSQL: localhost:5432
Branch Strategy
Aya uses a trunk-based development workflow with short-lived feature branches.Branch Naming Convention
Use descriptive branch names with prefixes:Creating a Feature Branch
Development Loop
Follow this cycle for efficient development:Frontend Development
Backend Development
Full Stack Verification
Before committing, always run from the project root:- Backend linting, static analysis, and tests
- Frontend linting, formatting checks, and snapshot tests (CI mode)
Commit Guidelines
Aya follows Conventional Commits for clear, semantic commit history.Commit Format
Commit Types
| Type | Description | Example |
|---|---|---|
feat | New feature | feat(profiles): add bio field to user profiles |
fix | Bug fix | fix(auth): handle null user in session check |
refactor | Code restructuring | refactor(api): extract pure functions for testing |
perf | Performance improvement | perf(queries): add index to story_tx.locale_code |
test | Add or fix tests | test(profiles): add snapshot tests for profile card |
docs | Documentation changes | docs(contributing): add testing guidelines |
style | Code style (formatting) | style(webclient): fix deno fmt issues |
chore | Maintenance tasks | chore(deps): update golangci-lint to v2.0 |
ci | CI/CD changes | ci(github): add Go test coverage action |
Scope Examples
- Backend:
profiles,stories,auth,api,business,adapters - Frontend:
webclient,components,routes,modules,i18n - Infrastructure:
docker,makefile,ci,deps
Example Commits
Good commits (descriptive, explain “why”):Commit Message Best Practices
Writing Descriptive Commits
Writing Descriptive Commits
✅ Do:
- Use imperative mood (“add feature” not “added feature”)
- Explain WHY the change was made, not just WHAT changed
- Reference issue numbers when applicable
- Keep subject line under 72 characters
- Add body for complex changes
- Use vague messages like “fix bug” or “update”
- Include personal frustrations or complaints
- Write multi-line subjects
- Add unnecessary details about HOW (code shows this)
Commit Granularity
Commit Granularity
One logical change per commit:✅ Good:❌ Bad:
Testing Requirements
Every contribution must include tests. See Testing Guidelines for details. Before committing:Pre-Commit Checklist
Before every commit, verify:- Code follows code style guidelines
- All tests pass (
make ok) - New functionality has tests
- No console.log or debug statements
- Commit message follows Conventional Commits
- No TODOs or placeholder code
- Documentation updated (if needed)
Submitting Changes
Once your feature is complete and tested:Create Pull Request
Open a PR on GitHub from your fork to
eser/aya.is:main.Follow the Pull Request Guidelines for PR format and requirements.Common Workflows
Syncing Your Fork
Syncing Your Fork
Keep your fork updated with the main repository:
Resolving Merge Conflicts
Resolving Merge Conflicts
If your branch conflicts with main:
Fixing Failed CI Checks
Fixing Failed CI Checks
If CI fails after pushing:
- Check the CI logs on GitHub
- Run the same checks locally:
- Fix issues and commit:
Working with Multiple Commits
Working with Multiple Commits
Clean up commit history before PR:
Getting Help
If you’re stuck:- Check Documentation: Review Code Style and Testing guides
- Search Issues: See if others had similar problems
- Ask in Discussions: Use GitHub Discussions for questions
- Read Source Code: Look at similar features for examples