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
39 changes: 39 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Bug report
description: Something counts wrong, renders wrong or fails.
labels: [bug]
body:
- type: input
id: surface
attributes:
label: Where
description: The route or command, as named in docs/feature-map.md if you can find it.
placeholder: /p/[siteKey]?range=7d
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: The exact steps or commands, starting from a fresh `pnpm seed` if data matters.
validations:
required: true
- type: textarea
id: expected
attributes:
label: What you expected, and what happened instead
validations:
required: true
- type: dropdown
id: mode
attributes:
label: Mode
options:
- Simple (one Node process)
- Edge (Cloudflare Worker and Neon)
- Not sure
validations:
required: true
- type: input
id: version
attributes:
label: Commit or version
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Self-hosting guide
url: https://github.com/masaok/copper-analytics/blob/main/docs/SELF_HOSTING.md
about: Setup, configuration and both deploy modes.
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Feature request
description: Something Copper should do that it does not.
labels: [enhancement]
body:
- type: textarea
id: problem
attributes:
label: What are you trying to do?
description: The situation, not the solution. Copper stays small on purpose, so the problem matters more than the feature.
validations:
required: true
- type: textarea
id: idea
attributes:
label: What would help
- type: checkboxes
id: scope
attributes:
label: Scope
options:
- label: This does not need to follow an individual visitor across days or sites.
required: true
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Changelog

## 0.1.0, 2026-10-04

The first public version.

- All-projects overview with live visitors, today against yesterday and a 30-day trend.
- Project reports: visitors, pageviews, visits, bounce rate, top pages, referrers, countries, devices, browsers, operating systems and UTM sources, over Today, 24 hours, 7 days, 30 days, 12 months or a custom range.
- Read-only share links, CSV export and a stats API with per-project tokens.
- `c.js`, a 482-byte tracker that follows single-page navigation.
- Two deploy modes: simple (one Node process and any Postgres) and edge (Cloudflare Worker, Durable Objects and Neon).
- GitHub sign-in, and Google sign-in when its credentials are set.
- `@copper-analytics/next`, a component for Next.js.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ pnpm verify # lint, checks, typecheck, tests and the production build

[CONTRIBUTING.md](CONTRIBUTING.md) has the process for people, [AGENTS.md](AGENTS.md) has the rules for changes, [docs/feature-map.md](docs/feature-map.md) lists every route with a command that reaches it, and [docs/guardrails.md](docs/guardrails.md) maps each rule to the check that enforces it.

## Changes

[CHANGELOG.md](CHANGELOG.md) lists what each version added.

## License

[MIT](LICENSE)
7 changes: 1 addition & 6 deletions docs/guardrails.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,7 @@ Each rule and the thing that enforces it. A rule with nothing in the right-hand
| Script entry points start outside the bundler and test runner | `migrations` CI job runs `migrate` and `seed` with `tsx` against a real Postgres |
| One Node major everywhere | `.nvmrc`, `engines` (`22.x`) and `@types/node` (`^22`) agree; CI reads `.nvmrc`; Dependabot holds `@types/node` majors |
| The dev overlay is not in screenshots | `devIndicators: false` in `apps/web/next.config.ts` |

## Waiting on a person

| Rule | What is missing |
| --- | --- |
| A red or missing check blocks the merge | Branch protection on `main` is a repository setting, not a file. Require `lint`, `docs`, `typecheck`, `test`, `build` and `migrations`, and require branches to be up to date. Then open one pull request that fails on purpose and confirm the merge is refused. |
| A red or missing check blocks the merge | Branch protection on `main` requires `lint`, `docs`, `typecheck`, `test`, `build` and `migrations`, up to date, admins included |

## Not adopted

Expand Down
Loading