tillerhand 3.43.0 → 3.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/board-chair.md +20 -20
- package/.claude/agents/code-reviewer.md +20 -20
- package/.claude/agents/council-advisor.md +14 -14
- package/.claude/agents/security-auditor.md +30 -30
- package/.claude/agents/test-writer.md +22 -22
- package/.claude/board/board-ai.md +25 -25
- package/.claude/board/board-api.md +25 -25
- package/.claude/board/board-architect.md +28 -28
- package/.claude/board/board-devops.md +25 -25
- package/.claude/board/board-mobile.md +25 -25
- package/.claude/board/board-performance.md +24 -24
- package/.claude/board/board-privacy.md +25 -25
- package/.claude/board/board-product.md +26 -26
- package/.claude/board/board-qa.md +28 -28
- package/.claude/board/board-ux.md +26 -26
- package/.claude/board/council.md +76 -76
- package/.claude/board/rules.md +61 -61
- package/.claude/claude-security-guidance.md +10 -10
- package/.claude/commands/adopt.md +70 -69
- package/.claude/commands/ask-mode.md +9 -9
- package/.claude/commands/board.md +15 -15
- package/.claude/commands/build.md +47 -47
- package/.claude/commands/dashboard.md +17 -17
- package/.claude/commands/design.md +31 -31
- package/.claude/commands/findings-all.md +14 -14
- package/.claude/commands/findings-business.md +7 -7
- package/.claude/commands/findings-legal.md +7 -7
- package/.claude/commands/findings-perf.md +7 -7
- package/.claude/commands/findings-security.md +9 -9
- package/.claude/commands/findings-tech.md +7 -7
- package/.claude/commands/findings-ux.md +7 -7
- package/.claude/commands/fix-bug.md +15 -15
- package/.claude/commands/freeze.md +8 -8
- package/.claude/commands/handoff.md +38 -38
- package/.claude/commands/kit-update.md +17 -14
- package/.claude/commands/language.md +13 -0
- package/.claude/commands/maintain.md +19 -19
- package/.claude/commands/plan-task.md +32 -32
- package/.claude/commands/qa.md +17 -17
- package/.claude/commands/release.md +40 -40
- package/.claude/commands/research.md +31 -31
- package/.claude/commands/retro.md +32 -32
- package/.claude/commands/review-changes.md +15 -15
- package/.claude/commands/rollback.md +24 -24
- package/.claude/commands/start.md +116 -113
- package/.claude/commands/tools.md +11 -11
- package/.claude/commands/user-feedback.md +11 -11
- package/.claude/commands/wrap-up.md +18 -18
- package/.claude/findings/lenses/business.md +24 -24
- package/.claude/findings/lenses/legal.md +29 -29
- package/.claude/findings/lenses/perf.md +19 -19
- package/.claude/findings/lenses/security.md +30 -30
- package/.claude/findings/lenses/tech.md +23 -23
- package/.claude/findings/lenses/ux.md +19 -19
- package/.claude/findings/protocol.md +54 -54
- package/.claude/findings/report-template.md +30 -30
- package/.claude/hooks/budget.mjs +7 -7
- package/.claude/hooks/checkpoint.mjs +12 -12
- package/.claude/hooks/commit-gate.mjs +38 -37
- package/.claude/hooks/cost.mjs +2 -2
- package/.claude/hooks/council.mjs +3 -3
- package/.claude/hooks/dashboard-data.mjs +4 -3
- package/.claude/hooks/dashboard.mjs +164 -149
- package/.claude/hooks/destructive-guard.mjs +74 -64
- package/.claude/hooks/edit-rounds.mjs +3 -3
- package/.claude/hooks/flow.mjs +10 -10
- package/.claude/hooks/freeze-guard.mjs +27 -23
- package/.claude/hooks/gate.mjs +25 -25
- package/.claude/hooks/guard-secrets.mjs +11 -11
- package/.claude/hooks/lang.mjs +114 -0
- package/.claude/hooks/messages.mjs +495 -0
- package/.claude/hooks/models.mjs +14 -11
- package/.claude/hooks/notify.mjs +3 -2
- package/.claude/hooks/package-gate.mjs +17 -15
- package/.claude/hooks/plugins-sync.mjs +9 -9
- package/.claude/hooks/prefs.mjs +19 -19
- package/.claude/hooks/preview.mjs +11 -11
- package/.claude/hooks/progress.mjs +14 -14
- package/.claude/hooks/qa-report.mjs +11 -10
- package/.claude/hooks/reminder.mjs +6 -3
- package/.claude/hooks/session-start.mjs +23 -17
- package/.claude/hooks/shared.mjs +1 -1
- package/.claude/hooks/status-read.mjs +5 -4
- package/.claude/hooks/statusline.mjs +14 -11
- package/.claude/hooks/structure-guard.mjs +9 -9
- package/.claude/hooks/test-guard.mjs +12 -12
- package/.claude/hooks/tools.mjs +28 -29
- package/.claude/hooks/usage.mjs +18 -15
- package/.claude/output-styles/anlatici.md +28 -28
- package/.claude/security-patterns.json +3 -3
- package/.claude/settings.json +2 -0
- package/.claude/skills/logo-design/SKILL.md +42 -42
- package/.claude/skills/motion-video/SKILL.md +52 -52
- package/.claude/skills/source-research/SKILL.md +35 -35
- package/.claude/skills/ui-motion/SKILL.md +38 -38
- package/.github/workflows/kit-tests.yml +7 -7
- package/.github/workflows/npm-publish.yml +16 -16
- package/AGENTS.md +56 -56
- package/CHANGELOG.md +7 -7
- package/CLAUDE.md +5 -5
- package/README.md +199 -172
- package/README.tr.md +292 -0
- package/docs/architecture/overview.md +31 -31
- package/docs/architecture/stack.md +2 -2
- package/docs/archive/README.md +4 -4
- package/docs/decisions/adr-template.md +14 -14
- package/docs/decisions/log.md +10 -10
- package/docs/findings/README.md +13 -13
- package/docs/findings/config.md +13 -13
- package/docs/legal/privacy-kvkk.md +1 -1
- package/docs/operations/accounts.md +25 -25
- package/docs/operations/deploy-setup.md +64 -64
- package/docs/operations/feature-flags.md +17 -17
- package/docs/operations/maintenance.md +48 -48
- package/docs/operations/release-checklist.md +61 -61
- package/docs/operations/spend-alarms.md +28 -28
- package/docs/product/feedback.md +9 -8
- package/docs/product/glossary.md +16 -16
- package/docs/product/launch.md +28 -28
- package/docs/product/prd.md +43 -42
- package/docs/product/roadmap.md +31 -30
- package/docs/product/specs/_template.md +13 -12
- package/docs/product/unit-economics.md +23 -22
- package/docs/quality/metrics.md +14 -14
- package/docs/quality/retros.md +11 -11
- package/docs/quality/test-plan.md +48 -48
- package/docs/security/checklist.md +57 -57
- package/docs/workflow/board.md +7 -7
- package/docs/workflow/cost-log.md +4 -4
- package/docs/workflow/decision-protocol.md +70 -70
- package/docs/workflow/learning.md +4 -4
- package/docs/workflow/mcp-catalog.md +31 -31
- package/docs/workflow/models.md +35 -35
- package/docs/workflow/progress.md +7 -7
- package/docs/workflow/skills.md +108 -108
- package/docs/workflow/usage-limits.md +62 -62
- package/kit/CHANGELOG.md +882 -841
- package/kit/VERSION +1 -1
- package/kit/guide.html +713 -477
- package/kit/guide.tr.html +1328 -0
- package/kit/kit.mjs +56 -54
- package/kit/project/README.md +29 -29
- package/kit/project/gitignore +12 -12
- package/kit/templates/addons/ai/.env.example.append +5 -5
- package/kit/templates/addons/ai/ai/evals/README.md +11 -11
- package/kit/templates/addons/ai/ai/evals/cases.jsonl +2 -2
- package/kit/templates/addons/ai/ai/prompts/README.md +8 -8
- package/kit/templates/addons/ai/docs/ai/guide.md +56 -56
- package/kit/templates/backend/.claude/hooks/format.mjs +1 -1
- package/kit/templates/backend/.claude/structure.json +1 -1
- package/kit/templates/backend/.env.example +6 -6
- package/kit/templates/backend/.github/dependabot.yml +1 -1
- package/kit/templates/backend/.github/workflows/ci.yml +13 -13
- package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/backend/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +14 -14
- package/kit/templates/backend/.pre-commit-config.yaml +3 -3
- package/kit/templates/backend/docs/architecture/stack.md +98 -98
- package/kit/templates/backend/docs/architecture/structure.md +34 -34
- package/kit/templates/mobile/.claude/structure.json +1 -1
- package/kit/templates/mobile/.env.example +6 -6
- package/kit/templates/mobile/.github/dependabot.yml +2 -2
- package/kit/templates/mobile/.github/workflows/ci.yml +18 -18
- package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/mobile/.gitignore.append +2 -2
- package/kit/templates/mobile/docs/architecture/stack.md +113 -113
- package/kit/templates/mobile/docs/architecture/structure.md +33 -33
- package/kit/templates/mobile/docs/design/design-guide.md +37 -37
- package/kit/templates/mobile/tests/security/rls.mjs +22 -22
- package/kit/templates/web-saas/.claude/structure.json +1 -1
- package/kit/templates/web-saas/.env.example +11 -11
- package/kit/templates/web-saas/.github/dependabot.yml +3 -3
- package/kit/templates/web-saas/.github/workflows/ci.yml +20 -20
- package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +12 -12
- package/kit/templates/web-saas/docs/architecture/stack.md +116 -116
- package/kit/templates/web-saas/docs/architecture/structure.md +44 -44
- package/kit/templates/web-saas/docs/design/design-guide.md +38 -38
- package/kit/templates/web-saas/tests/live/smoke.spec.ts +4 -4
- package/kit/templates/web-saas/tests/security/rls.mjs +22 -22
- package/kit/tools/codex/.codex/hooks.json +1 -1
- package/package.json +2 -2
- package/README.en.md +0 -267
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Accounts and Deadlines
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> Every external account the project depends on is listed here. In one-person projects the most common disasters are not code:
|
|
4
|
+
> an expired domain, an invalid card that stops a service, a hijacked account without 2FA,
|
|
5
|
+
> a key nobody remembers owning. The `/dashboard` dashboard shows **dates expiring within 30 days** in the "Needs attention" area.
|
|
6
6
|
>
|
|
7
|
-
> **
|
|
8
|
-
>
|
|
7
|
+
> **Never write a password, key or token here.** Write only which account, who holds it, when it ends.
|
|
8
|
+
> Dates must use the `YYYY-AA-GG` format (the dashboard reads them).
|
|
9
9
|
|
|
10
10
|
## Hesaplar
|
|
11
11
|
|
|
12
|
-
|
|
|
12
|
+
| Service | Purpose | Account owner | 2FA | Plan / monthly cost | Expiry / renewal | Key rotation | Note |
|
|
13
13
|
|---|---|---|---|---|---|---|---|
|
|
14
|
-
| [GitHub] |
|
|
15
|
-
| [
|
|
14
|
+
| [GitHub] | Code repository | [email] | [yes/no] | [Free] | - | - | |
|
|
15
|
+
| [Domain registrar] | Domain name | | | | [YYYY-AA-GG] | - | Is auto-renewal on? |
|
|
16
16
|
| [Hosting] | | | | | | | |
|
|
17
|
-
| [
|
|
18
|
-
| [
|
|
19
|
-
| [
|
|
20
|
-
| [
|
|
21
|
-
| [AI
|
|
22
|
-
| [Apple / Google
|
|
17
|
+
| [Database] | | | | | | [YYYY-AA-GG] | |
|
|
18
|
+
| [Email service] | | | | | | | |
|
|
19
|
+
| [Payment provider] | | | | | | | |
|
|
20
|
+
| [Error tracking] | | | | | | | |
|
|
21
|
+
| [AI provider] | | | | | | [YYYY-AA-GG] | Spend limit: |
|
|
22
|
+
| [Apple / Google developer] | Store | | | | [YYYY-AA-GG] | | Annual membership |
|
|
23
23
|
|
|
24
24
|
## Ortamlar (dev / prod)
|
|
25
25
|
|
|
26
|
-
>
|
|
27
|
-
> `.mcp.json
|
|
26
|
+
> A project ref and a URL are not secrets; keys are still not written here. `/release` reads this table: it blocks the release
|
|
27
|
+
> if the prod ref appears in `.mcp.json`, in `.claude/` or in code.
|
|
28
28
|
|
|
29
|
-
|
|
|
29
|
+
| Environment | Service | Project ref / URL | Who connects |
|
|
30
30
|
|---|---|---|---|
|
|
31
|
-
| dev | [Supabase] | [dev ref] |
|
|
32
|
-
| prod | [Supabase] | [prod ref] |
|
|
31
|
+
| dev | [Supabase] | [dev ref] | Local environment, AI (MCP read-only and `supabase-dev`), trials outside CI |
|
|
32
|
+
| prod | [Supabase] | [prod ref] | Hosting only (Vercel / EAS environment variables). AI and the local environment do not connect |
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Rules
|
|
35
35
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- `/maintain quarterly`
|
|
36
|
+
- Add a row to this table whenever a new external service is added (`/start` Step 5, a new integration).
|
|
37
|
+
- 2FA is mandatory on critical accounts: code repository, hosting, database, domain, payment, email.
|
|
38
|
+
- Also write the payment card's expiry date in the "Expiry" column (services stop when the card expires).
|
|
39
|
+
- `/maintain quarterly` reviews this table; `/release first` leaves no empty row.
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Deploy Setup
|
|
2
2
|
|
|
3
|
-
> `/release first` → "
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
>
|
|
3
|
+
> `/release first` → "Deploy setup" uses this file. Only the section for the providers in `docs/architecture/stack.md` is read.
|
|
4
|
+
> The steps come from the providers' official docs; each section has the source and the check date. Panels change:
|
|
5
|
+
> before using, reopen the source page with `source-research`. If something changed, follow the current source and write the difference in the report.
|
|
6
|
+
> A source date older than a year is marked with ⚠️.
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Rules
|
|
9
9
|
|
|
10
|
-
- **
|
|
11
|
-
- `mattpocock-skills:wizard`
|
|
12
|
-
-
|
|
13
|
-
- AI
|
|
14
|
-
-
|
|
15
|
-
-
|
|
10
|
+
- **A secret value is never written in chat or in a file.** Not in this file, not in `accounts.md`, not in code. The AI says only the variable name (as in `.env.example`); the user enters the value in the provider's panel themselves.
|
|
11
|
+
- The `mattpocock-skills:wizard` script does not ask for a prod secret and does not write a prod value to `.env`. The prod value is entered in the panel. The script passes only CI secrets (e.g. `LIVE_TEST_*`) to `gh secret set` with hidden input in the user's terminal. The script stays under `sandbox/` and is deleted when the work is done.
|
|
12
|
+
- A prod deploy, a rollback drill and a restore from backup do not start without approval.
|
|
13
|
+
- The AI and the local environment do not connect to the prod database (`accounts.md` → Ortamlar). The only exception: the backup the user takes in their own terminal (Supabase → Backup).
|
|
14
|
+
- The result of each step goes into `accounts.md` (service, owner, 2FA, plan, expiry; the prod ref and URL under Ortamlar) and into the `/release` report.
|
|
15
|
+
- The kit updates this file; do not edit it in the project. Write a step that conflicts with the source in the report.
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Order
|
|
18
18
|
|
|
19
|
-
1. Hosting
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
22
|
-
4.
|
|
23
|
-
5.
|
|
19
|
+
1. Hosting project (prod, separate from dev)
|
|
20
|
+
2. Environment variables (separate values for Production and Preview)
|
|
21
|
+
3. Domain and DNS
|
|
22
|
+
4. Backup and point-in-time recovery (PITR)
|
|
23
|
+
5. Rollback drill (last, with approval)
|
|
24
24
|
|
|
25
25
|
## Vercel (web)
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Checked: 2026-10-25. Sources: [Environment variables](https://vercel.com/docs/environment-variables) (2026-09-17) · [Add a domain](https://vercel.com/docs/domains/working-with-domains/add-a-domain) (2026-09-16) · [A record](https://vercel.com/kb/guide/a-record-and-caa-with-vercel) (2026-10-16) · [Instant Rollback](https://vercel.com/docs/instant-rollback) (2026-07-07)
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
**Project.** Connect the GitHub repository to a Vercel project. A push to the prod branch (usually `main`) produces the prod deploy; other branches produce previews.
|
|
30
30
|
|
|
31
|
-
**
|
|
31
|
+
**Environment variables.** Settings → Environment Variables. For each variable pick the environment: Production, Preview, Development. Keys and tokens are entered as **Secret** (unreadable after saving); open values such as URLs as **Config**. A change does not apply to old deploys; a new deploy is needed. Limit: 64 KB total per deploy (5 KB per variable at the edge).
|
|
32
32
|
|
|
33
|
-
**
|
|
34
|
-
- Apex (`example.com`): **A**
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
33
|
+
**Domain.** Settings → Domains → Add Domain (CLI: `vercel domains add example.com <proje>`). When you add the apex, `www` is recommended: add both and redirect one to the other.
|
|
34
|
+
- Apex (`example.com`): **A** record. Take the value from the project's domain card. In most projects it is `76.76.21.21`; new projects may differ (e.g. `216.198.79.1`); verification looks for the value on the card.
|
|
35
|
+
- Subdomain (`www`, `app`): **CNAME**, the target is project-specific (on the card, e.g. `…vercel-dns-017.com`).
|
|
36
|
+
- If the domain is in another Vercel account, a **TXT** verification named `_vercel` is requested.
|
|
37
|
+
- If you will move the nameserver to Vercel, first copy the MX and verification TXT records; otherwise email stops. SSL is automatic.
|
|
38
38
|
|
|
39
|
-
**
|
|
39
|
+
**Backup.** There is no data in Vercel; see the database's section.
|
|
40
40
|
|
|
41
|
-
**
|
|
42
|
-
- Hobby
|
|
43
|
-
-
|
|
44
|
-
-
|
|
41
|
+
**Rollback.** Project → Production Deployment box → Instant Rollback (or Deployments → ⋮ → Instant Rollback).
|
|
42
|
+
- Hobby returns only to the previous prod deploy; Pro and Enterprise to any deploy that went to prod.
|
|
43
|
+
- Environment variables are not rolled back; the old build runs with its own values.
|
|
44
|
+
- After a rollback the prod domain is not assigned automatically: a new push does not go live. When the fix is ready, "Undo Rollback" or `vercel promote <deploy-url>`.
|
|
45
45
|
|
|
46
|
-
## Supabase (
|
|
46
|
+
## Supabase (database + auth)
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Checked: 2026-10-25. Sources: [Backups](https://supabase.com/docs/guides/platform/backups) · [Backup and restore using the CLI](https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore) · [API keys](https://supabase.com/docs/guides/api/api-keys) (no dates on the pages)
|
|
49
49
|
|
|
50
|
-
**
|
|
50
|
+
**Project.** Open a separate project for prod. Write its ref in `accounts.md` → Ortamlar → prod row. Auth and email settings: `docs/architecture/stack.md` → "Go live (extra)".
|
|
51
51
|
|
|
52
|
-
**
|
|
52
|
+
**Keys.** The new keys are `sb_publishable_…` (can go to the client) and `sb_secret_…` (server only; as Secret in the hosting panel). A long key starting with `eyJ` is the old type. Supabase is deprecating the old `anon` and `service_role` keys by the end of 2026: use the new keys in a new project. If `.env.example` still has the old names (`NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`), enter the new key under the same name.
|
|
53
53
|
|
|
54
|
-
**
|
|
55
|
-
- Free:
|
|
54
|
+
**Backup.**
|
|
55
|
+
- Free: automatic backups are not listed. Take a regular external backup. The default `db dump` takes only the schema; a full backup is three files. **The user runs** these commands **in their own terminal**: the connection address holds the prod database password, the AI does not run the command and does not ask for the password. The files do not enter the repository.
|
|
56
56
|
```bash
|
|
57
57
|
npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f roles.sql --role-only
|
|
58
58
|
npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f schema.sql
|
|
59
59
|
npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f data.sql --use-copy --data-only -x "storage.buckets_vectors" -x "storage.vector_indexes"
|
|
60
60
|
```
|
|
61
|
-
`PROD_DB_URL`:
|
|
62
|
-
- Pro 7
|
|
63
|
-
- PITR: Pro
|
|
64
|
-
-
|
|
65
|
-
-
|
|
61
|
+
`PROD_DB_URL`: the Session pooler address on the panel's Connect screen; it is not written to a permanent file. Requirements: Supabase CLI and Docker.
|
|
62
|
+
- Pro keeps daily backups up to 7 days, Team 14 days, Enterprise 30 days.
|
|
63
|
+
- PITR: an add-on on Pro and above, at least Small compute. 7/14/28 days retention, about $100/$200/$400 a month. At worst 2 minutes of data loss. When PITR is turned on, daily backups stop.
|
|
64
|
+
- Restore: Database → Backups. The project is unreachable during this; the time grows with the database size. Storage files are not in the backup.
|
|
65
|
+
- Drill: do not restore prod. The user loads the three files into a temporary local database on their own machine (`supabase start`) with `psql --single-transaction` (order and flags are on the source page), checks a few tables, then deletes the local database and the files. Loading into the dev project: personal data from prod would move to the environment the AI reads.
|
|
66
66
|
|
|
67
|
-
**
|
|
67
|
+
**Rollback.** To undo a migration, write a reverse migration; restoring from backup is the last resort (downtime and data loss).
|
|
68
68
|
|
|
69
69
|
## Railway (backend)
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Checked: 2026-10-25. Sources: [Working with domains](https://docs.railway.com/networking/domains/working-with-domains) · [Variables](https://docs.railway.com/variables) · [Deployment actions](https://docs.railway.com/deployments/deployment-actions) · [Backups](https://docs.railway.com/volumes/backups) · [Plans](https://docs.railway.com/pricing/plans) (no dates on the pages)
|
|
72
72
|
|
|
73
|
-
**
|
|
73
|
+
**Project.** Create a service from the GitHub repository. Railway address: service Settings → Networking → Public Networking → Generate Domain.
|
|
74
74
|
|
|
75
|
-
**
|
|
75
|
+
**Environment variables.** The service's Variables tab. A value shared by several services: Project Settings → Shared Variables, in the service `${{shared.AD}}`. Database address by reference: `${{Postgres.DATABASE_URL}}` (if the service name is Postgres). Make secrets **sealed**: the value is not visible in the interface or the API, cannot be unsealed, and is not copied to a PR environment. Changes are first "staged"; Deploy applies them.
|
|
76
76
|
|
|
77
|
-
**
|
|
78
|
-
-
|
|
79
|
-
- Cloudflare proxy
|
|
80
|
-
- SSL (Let's Encrypt)
|
|
77
|
+
**Domain.** Service Settings → Public Networking → + Custom Domain. The panel shows a **CNAME** (e.g. `…up.railway.app`) and a **TXT** record; enter both exactly. Without the TXT the domain is not verified and returns 404. Propagation can take up to 72 hours.
|
|
78
|
+
- For the apex, the DNS provider must support CNAME flattening or ALIAS (Cloudflare, Namecheap: CNAME; DNSimple: ALIAS). Route 53, Azure DNS, GoDaddy, Hostinger, NameSilo, Squarespace do not support it: move the nameserver to Cloudflare.
|
|
79
|
+
- If the Cloudflare proxy is on, the SSL/TLS setting must be **Full**; Full (Strict) does not work.
|
|
80
|
+
- SSL (Let's Encrypt) within 1 hour after DNS. Limit: Trial 1 domain, Hobby 2 per service, Pro 20.
|
|
81
81
|
|
|
82
|
-
**
|
|
82
|
+
**Backup.** Database service → Backups tab. Manual backup and schedule: daily (kept 6 days), weekly (27 days), monthly (89 days). A manual backup is limited to 50% of the volume size. A restore opens a new volume, the old one stays detached; Deploy applies it and it works only within the same project and environment. If the volume is deleted, its backups go too: also take an external backup with `pg_dump`.
|
|
83
83
|
|
|
84
|
-
**
|
|
84
|
+
**Rollback.** Service → Deployments → previous deploy → ⋮ → Rollback. It restores the image and the variables, not the database schema. The window equals the image retention time: Free/Trial 24 hours, Hobby 72 hours, Pro 120 hours. For anything older, redeploy.
|
|
85
85
|
|
|
86
|
-
## EAS (
|
|
86
|
+
## EAS (mobile)
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
Checked: 2026-10-25. Sources: [Environment variables](https://docs.expo.dev/eas/environment-variables/) (2026-07-21) · [Manage variables](https://docs.expo.dev/eas/environment-variables/manage/) (2026-07-21) · [Submit](https://docs.expo.dev/submit/introduction/) (2026-10-12) · [Rollbacks](https://docs.expo.dev/eas-update/rollbacks/) (2025-03-03 ⚠️)
|
|
89
89
|
|
|
90
|
-
**
|
|
90
|
+
**Project and accounts.** Apple Developer Program and Google Play Console accounts go into `accounts.md` (with the yearly renewal date). Prepare the store listing in Play Console before submission. `eas submit` uploads the first Android release to the internal testing track. Submission in CI needs a Google service account key and an App Store Connect API key; these files do not enter the repository.
|
|
91
91
|
|
|
92
|
-
**
|
|
93
|
-
- plain text:
|
|
94
|
-
- sensitive:
|
|
95
|
-
- secret:
|
|
92
|
+
**Environment variables.** Environments: development, preview, production. Visibility:
|
|
93
|
+
- plain text: visible on the site, in the CLI and in the log;
|
|
94
|
+
- sensitive: hidden in the log, readable on the site and in the CLI;
|
|
95
|
+
- secret: readable only on EAS servers. For keys needed during the build (e.g. a private package token).
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
Every value that goes into the app (`EXPO_PUBLIC_…`) is public: do not put a secret there. The build profile picks the environment from `eas.json` → `environment`; update with `eas update --environment production`. Enter the value on the site: `eas env:set --value …` writes the value to the shell history.
|
|
98
98
|
|
|
99
|
-
**
|
|
99
|
+
**Backup.** There is no data in EAS; see the backend's section (Supabase or Railway).
|
|
100
100
|
|
|
101
|
-
**
|
|
101
|
+
**Rollback.** `eas update:rollback`: republishes the previous update or returns to the update embedded in the build. A native code change is not rolled back with an update: a new build and store review are needed.
|
|
102
102
|
|
|
103
|
-
##
|
|
103
|
+
## Rollback drill (all)
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
Once before launch, with user approval: publish a harmless change, roll it back, see with a smoke test that the old version is live, then return to normal (in Vercel "Undo Rollback"). Write the result in the `/release` report on the "Rollback path" line.
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Feature Flags
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> Risky features ship behind a flag. If something goes wrong, the flag is turned off **without a redeploy** (kill switch).
|
|
4
|
+
> A forgotten flag is technical debt: every flag gets a removal date. The `/dashboard` dashboard shows the overdue ones.
|
|
5
|
+
> The implementation method is in `docs/architecture/stack.md` → "Acceptance tests and feature flags".
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## When is a flag mandatory?
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
- AI/LLM
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
9
|
+
- Payment, subscription or money movement
|
|
10
|
+
- A feature that calls an AI/LLM (risk of a cost explosion)
|
|
11
|
+
- A feature that sends bulk email / notifications
|
|
12
|
+
- A feature that deletes, moves or exports data
|
|
13
|
+
- A large interface change (to roll it out gradually)
|
|
14
14
|
|
|
15
15
|
## Bayraklar
|
|
16
16
|
|
|
17
|
-
`/dashboard`
|
|
17
|
+
The `/dashboard` dashboard reads this table. Date format `YYYY-AA-GG`, status `on` / `off` / `gradual %N`.
|
|
18
18
|
|
|
19
|
-
|
|
|
19
|
+
| Flag | Purpose | Status | Owner | Added | Removal date | Kill switch tested |
|
|
20
20
|
|---|---|---|---|---|---|---|
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Rules
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
24
|
+
- The flag name uses the `ozellik_adi` form and matches `docs/product/glossary.md`.
|
|
25
|
+
- The code path is also tested while the flag is off (at least one test for each of the two states).
|
|
26
|
+
- After the feature is open to everyone and has run without problems for 2 weeks, the flag and the old code path are removed.
|
|
27
|
+
- Kill switch: the step to turn it off from the panel or an environment variable is written in this file and has been tried at least once.
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
> `/maintain weekly` · `/maintain monthly` · `/maintain quarterly`
|
|
6
|
-
>
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
- [ ]
|
|
11
|
-
- [ ] Uptime:
|
|
12
|
-
- [ ]
|
|
13
|
-
- [ ]
|
|
14
|
-
- [ ]
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
- [ ]
|
|
19
|
-
- [ ]
|
|
20
|
-
- [ ]
|
|
21
|
-
- [ ]
|
|
22
|
-
- [ ]
|
|
23
|
-
- [ ] `docs/workflow/progress.md
|
|
24
|
-
- [ ]
|
|
25
|
-
- [ ]
|
|
26
|
-
- [ ] `docs/product/unit-economics.md`
|
|
27
|
-
- [ ] `docs/operations/feature-flags.md`:
|
|
28
|
-
- [ ] `docs/product/feedback.md`:
|
|
29
|
-
|
|
30
|
-
##
|
|
31
|
-
|
|
32
|
-
- [ ] **
|
|
33
|
-
- [ ]
|
|
34
|
-
- [ ]
|
|
35
|
-
- [ ]
|
|
36
|
-
- [ ] `docs/legal/privacy-kvkk.md`
|
|
37
|
-
- [ ] `docs/security/checklist.md
|
|
38
|
-
- [ ] `docs/operations/accounts.md`:
|
|
39
|
-
|
|
40
|
-
##
|
|
41
|
-
|
|
42
|
-
1. **
|
|
43
|
-
2. **
|
|
44
|
-
3. **
|
|
45
|
-
4. **
|
|
46
|
-
5.
|
|
1
|
+
# Maintenance and Regular Checks
|
|
2
|
+
|
|
3
|
+
> A live project decays on its own: dependencies age, certificates and cards expire,
|
|
4
|
+
> bills swell, backups stop silently. This file catches those.
|
|
5
|
+
> The commands `/maintain weekly` · `/maintain monthly` · `/maintain quarterly` run the matching list and add to the log.
|
|
6
|
+
> Project-type-specific extra items: `docs/architecture/stack.md` → "Maintenance (extra)".
|
|
7
|
+
|
|
8
|
+
## Weekly (~15 min)
|
|
9
|
+
|
|
10
|
+
- [ ] Error tracking: any new or rising errors? If yes, add them to `docs/product/roadmap.md` as tasks.
|
|
11
|
+
- [ ] Uptime: was there an outage?
|
|
12
|
+
- [ ] Cost: is hosting, DB and AI API spend within the expected range? Did a spend alarm fire (`docs/operations/spend-alarms.md`)?
|
|
13
|
+
- [ ] User feedback / support inbox scanned.
|
|
14
|
+
- [ ] Were backups taken successfully in the last 7 days?
|
|
15
|
+
|
|
16
|
+
## Monthly (~1 hour)
|
|
17
|
+
|
|
18
|
+
- [ ] Dependency updates (patch and minor versions) + tests.
|
|
19
|
+
- [ ] Dependency security scan (`npm audit` / `uv run --with pip-audit pip-audit`).
|
|
20
|
+
- [ ] Performance measurement (project-type-specific targets, `docs/architecture/stack.md`).
|
|
21
|
+
- [ ] Cost trend: why did it rise compared with last month?
|
|
22
|
+
- [ ] Clean up unused services, environment variables, feature flags, dead code.
|
|
23
|
+
- [ ] Are `docs/workflow/progress.md` and `docs/architecture/overview.md` current?
|
|
24
|
+
- [ ] Analytics: status against the success criteria (`docs/product/prd.md` §4).
|
|
25
|
+
- [ ] Duplicate code ratio (`npx jscpd --silent .`) and a monthly row in `docs/quality/metrics.md`.
|
|
26
|
+
- [ ] Is `docs/product/unit-economics.md` current with the real invoices?
|
|
27
|
+
- [ ] `docs/operations/feature-flags.md`: were the flags past their removal date cleaned up?
|
|
28
|
+
- [ ] `docs/product/feedback.md`: was new feedback processed (`/user-feedback`)?
|
|
29
|
+
|
|
30
|
+
## Quarterly (every 3 months, ~half a day)
|
|
31
|
+
|
|
32
|
+
- [ ] **Full restore drill from backup** (into a separate environment).
|
|
33
|
+
- [ ] Access review: hosting, DB, payment, domain, code repository. Remove old access.
|
|
34
|
+
- [ ] Rotate critical keys, especially those suspected of a leak.
|
|
35
|
+
- [ ] Plan major version updates (framework, runtime, SDK).
|
|
36
|
+
- [ ] Are `docs/legal/privacy-kvkk.md` and the published texts current? Was new data/a new service added?
|
|
37
|
+
- [ ] Full pass of `docs/security/checklist.md`.
|
|
38
|
+
- [ ] `docs/operations/accounts.md`: expiry dates, 2FA, accounts no longer used.
|
|
39
|
+
|
|
40
|
+
## Incident response (site down / data leaked / bill exploded)
|
|
41
|
+
|
|
42
|
+
1. **Stop:** If damage continues, stop it first. Return to the previous version (rollback), revoke the leaked key, put the service in maintenance mode.
|
|
43
|
+
2. **Record:** When did it start, who was affected, what did you see? Take screenshots and logs. You will not remember later.
|
|
44
|
+
3. **Fix:** Find and fix the root cause; add a regression test.
|
|
45
|
+
4. **Notify:** For a personal data breach, notify the KVKK Board within **72 hours** and inform the affected users (`docs/legal/privacy-kvkk.md`).
|
|
46
|
+
5. **Learn:** Write it in the log below. Add the check that prevents a repeat to the matching list.
|
|
47
47
|
|
|
48
48
|
## Bakım kaydı
|
|
49
49
|
|
|
50
|
-
|
|
|
50
|
+
| Date | Type | Findings | Done / task opened |
|
|
51
51
|
|---|---|---|---|
|
|
52
|
-
| |
|
|
52
|
+
| | weekly/monthly/quarterly/incident | | |
|