Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,9 @@ trim_trailing_whitespace = false
[Makefile]
indent_style = tab

[*.{py,go,java,kt}]
[*.{py,java,kt,rs,c,h,cpp,hpp,cs}]
indent_size = 4

# gofmt formats with tabs, not spaces — don't fight it.
[*.go]
indent_style = tab
3 changes: 2 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# Never commit the .env file — it is listed in .gitignore.

# ── Server ─────────────────────────────────────────────
PORT=3000
# Only applies if this project runs a network service. Remove otherwise.
# PORT=3000
# HOST=0.0.0.0

# ── Database ────────────────────────────────────────────
Expand Down
2 changes: 1 addition & 1 deletion .githooks/commit-msg
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ if ! echo "$SUBJECT" | grep -qE "$PATTERN"; then
echo " Example: feat(auth): add refresh token rotation"
echo ""
echo " Allowed types: feat | fix | refactor | test | docs | chore | perf | ci"
echo " Subject must be lowercase and under 72 characters."
echo " Description must be under 72 characters."
echo ""
echo " Your message: $SUBJECT"
echo ""
Expand Down
19 changes: 2 additions & 17 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,30 +43,15 @@ body:
validations:
required: true

- type: dropdown
id: area
attributes:
label: Area
options:
- Frontend / UI
- Backend / API
- Database
- Authentication
- CI/CD
- Documentation
- Other
validations:
required: true

- type: textarea
id: environment
attributes:
label: Environment
description: Your runtime versions.
placeholder: |
- OS: macOS 15 / Ubuntu 24.04 / Windows 11
- Node: 22.x
- pnpm: 10.x
- Runtime: Node 22.x / Python 3.12 / Go 1.22 / etc.
- Package manager / build tool version (if applicable)
- Browser (if applicable): Chrome 134
validations:
required: true
Expand Down
15 changes: 0 additions & 15 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,6 @@ body:
label: Alternatives considered
description: What other approaches did you consider? Why did you reject them?

- type: dropdown
id: area
attributes:
label: Area
options:
- Frontend / UI
- Backend / API
- Database
- Authentication
- Developer experience
- Documentation
- Other
validations:
required: true

- type: textarea
id: context
attributes:
Expand Down
64 changes: 52 additions & 12 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,58 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 3
groups:
minor-and-patch:
applies-to: version-updates
update-types:
- "minor"
- "patch"
# ── Application dependencies ─────────────────────────────
# Uncomment whichever package-ecosystem matches this project
# (https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem).

# - package-ecosystem: "npm" # Node / JavaScript / TypeScript
# directory: "/"
# schedule:
# interval: "weekly"
# cooldown:
# default-days: 3
# groups:
# minor-and-patch:
# applies-to: version-updates
# update-types:
# - "minor"
# - "patch"

# - package-ecosystem: "pip" # Python
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "gomod" # Go
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "cargo" # Rust
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "maven" # Java (Maven)
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "gradle" # Java / Kotlin (Gradle)
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "composer" # PHP
# directory: "/"
# schedule:
# interval: "weekly"

# - package-ecosystem: "bundler" # Ruby
# directory: "/"
# schedule:
# interval: "weekly"

# ── Always applicable, regardless of language ────────────
- package-ecosystem: "github-actions"
directory: "/"
schedule:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ on:
pull_request:
branches: [main]

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
Expand Down
22 changes: 18 additions & 4 deletions .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
pull_request:
branches: [main]

permissions:
contents: read

jobs:
commitlint:
name: Validate commit messages
Expand All @@ -13,8 +16,19 @@ jobs:
with:
fetch-depth: 0

# Reuses .githooks/commit-msg so there is a single source of truth for
# the Conventional Commits rule — no Node/commitlint install required,
# so this works the same for every language this template is used for.
- name: Check commit messages
uses: wagoid/commitlint-github-action@v6
with:
failOnWarnings: false
helpURL: https://www.conventionalcommits.org
run: |
set -e
chmod +x .githooks/commit-msg
FAILED=0
for sha in $(git rev-list "${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}"); do
git log -1 --format=%B "$sha" > /tmp/commit-msg
if ! .githooks/commit-msg /tmp/commit-msg; then
echo "::error::Commit $sha does not follow Conventional Commits"
FAILED=1
fi
done
exit "$FAILED"
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

<!-- Replace the title above, fill in each section, and delete these comments when done. -->

<!--
One-time repo settings (not controlled by files in this template):
- Enable GitHub Discussions under Settings → General → Features.
CONTRIBUTING.md, SUPPORT.md, the FAQ, and the issue template config
all link to Discussions as the place to ask questions; those links
404 until this is turned on.
-->

[![CI](https://github.com/your-org/your-repo/actions/workflows/ci.yml/badge.svg)](https://github.com/your-org/your-repo/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

Expand Down
10 changes: 6 additions & 4 deletions docs/developer-guide/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,17 @@ Open a [Feature Request issue](../../../issues/new/choose) first to discuss the

**Q: Tests are failing locally but passing in CI (or vice versa).**
- Make sure your `.env` matches the values expected by the test suite
- Run `pnpm install --frozen-lockfile` to ensure your dependencies match the lockfile
- Reinstall dependencies from the lockfile to rule out a local drift
<!-- e.g. npm ci / pip install -r requirements.txt --no-deps / go mod tidy -->

**Q: How do I run a single test file?**
```bash
pnpm vitest run path/to/your.test.ts
# Replace with your test runner's single-file invocation
# e.g. npm test -- path/to/file.test.ts / pytest path/to/test_file.py / go test ./path/...
```

**Q: The build fails with type errors I didn't introduce.**
Pull the latest `main` and run `pnpm install` — a dependency may have been updated.
**Q: The build fails with errors I didn't introduce.**
Pull the latest `main` and reinstall dependencies — one may have been updated since you last built.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ This guide walks you through setting up the project locally for development.

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `PORT` | No | `3000` | Port the server listens on |
| `PORT` | No | `3000` | Port the server listens on (only if this project runs a network service; remove otherwise) |
| <!-- add rows --> | | | |

---
Expand Down