Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
502029e
feat: add repository goals and social plans
debba Sep 3, 2026
5eb8aa1
feat: add repository source libraries to social plans
debba Sep 4, 2026
6d513dc
chore(growth): establish governance baseline
debba Sep 4, 2026
14ad75f
docs(growth): verify Growth Studio inventory
debba Sep 4, 2026
fd44d9c
docs(growth): settle phase one and two decisions
debba Sep 4, 2026
b699f9b
chore(growth): harden validation guards
debba Sep 4, 2026
42b6d02
feat(growth): serve Growth Studio routes
debba Sep 4, 2026
94f2f66
feat(growth): add dedicated studio shell chrome
debba Sep 4, 2026
6a7a9c0
feat(growth): replace goals tab with studio entry
debba Sep 4, 2026
0a2a943
feat(growth): add repository missions panel
debba Sep 4, 2026
6896434
feat(growth): add repository growth home
debba Sep 4, 2026
ace3d16
feat(growth): add repository workspace overview
debba Sep 4, 2026
26cd295
feat(growth): polish the Growth Studio shell
debba Sep 4, 2026
d473394
feat(growth): add growth store schema and CRUD
debba Sep 4, 2026
9404900
feat(growth): migrate legacy goal suggestions
debba Sep 4, 2026
62dc492
feat(growth): add account-scoped growth API routes
debba Sep 4, 2026
f18fbe6
feat(growth): add interventions backlog
debba Sep 4, 2026
f4b4d36
feat(growth): add content item drafting drawer
debba Sep 4, 2026
e5430a6
feat(growth): add repository library profile editor
debba Sep 4, 2026
f36beb5
docs(growth): author phase 3 editorial plan tasks
debba Sep 4, 2026
4a32bd1
feat(growth): add deterministic editorial plan slots
debba Sep 4, 2026
d1c4b6a
feat(growth): add editorial planner APIs
debba Sep 4, 2026
1d3f146
feat(growth): add media-aware content drafting
debba Sep 4, 2026
cf4c37f
feat(growth): add repository month calendar
debba Sep 4, 2026
ec38913
feat(growth): add week calendar rescheduling
debba Sep 4, 2026
b49a55f
feat(growth): add the weekly editorial queue
debba Sep 4, 2026
a281296
feat(growth): add calendar ICS export
debba Sep 4, 2026
f4539e5
feat(growth): add editorial plan management
debba Sep 4, 2026
4c57f1c
docs(growth): close phase 3 and author media tasks
debba Sep 4, 2026
e32efca
feat(growth): add private asset uploads and serving
debba Sep 4, 2026
6452e80
feat(growth): add library asset uploads
debba Sep 4, 2026
76b90b7
feat(growth): import media from project sources
debba Sep 4, 2026
70807b2
feat(growth): add generated SVG cards
debba Sep 4, 2026
bd2706c
feat(growth): add browser image rasterization
debba Sep 4, 2026
bf3f612
feat(growth): add image clipboard and download actions
debba Sep 4, 2026
108caf7
feat(growth): add media attachment workflow
debba Sep 4, 2026
e098bdd
docs(growth): close media phase and author loop tasks
debba Sep 4, 2026
b3241b4
feat(growth): add deterministic opportunity scanning
debba Sep 4, 2026
342826f
feat(growth): add opportunity scanning to interventions
debba Sep 4, 2026
c4714ab
feat(growth): add snapshot performance attribution
debba Sep 4, 2026
26d67b5
feat(growth): add performance summaries
debba Sep 4, 2026
37b57bf
feat(growth): add weekly growth reviews
debba Sep 4, 2026
95e229a
feat(growth): add evergreen content recycling
debba Sep 4, 2026
ada0770
feat(growth): reweight plans from performance
debba Sep 4, 2026
e7cd112
fix(growth): close phase five and author release tasks
debba Sep 4, 2026
0fecb70
feat(growth): add unified calendar read API
debba Sep 4, 2026
81a1ad5
feat(growth): add unified calendar views and filters
debba Sep 4, 2026
3ae7a6f
feat(growth): add coordinated repository planning
debba Sep 4, 2026
96986c1
feat(growth): add account-scoped growth settings API
debba Sep 4, 2026
14d69f4
feat(growth): add reusable planning defaults
debba Sep 4, 2026
eabc3eb
feat(growth): integrate global home and review refresh
debba Sep 9, 2026
7c04214
docs(growth): document the Growth Studio release
debba Sep 9, 2026
097c63f
fix(growth): complete final release QA
debba Sep 9, 2026
10342e9
feat(growth): move creation forms to modals
debba Sep 11, 2026
137ac89
Merge remote-tracking branch 'origin/main' into HEAD
debba Sep 11, 2026
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
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## Unreleased

### Growth Studio

- Added a dedicated `/growth` shell with repository workspaces for Missions, interventions and opportunity scans, editorial plans, month and week calendars, Queue, Library, and weekly Review.
- Added an additive, idempotent account-scoped SQLite model with one-shot migration of legacy goal suggestions and proposals into first-class interventions and content drafts.
- Added a media-complete editorial workflow with private uploads, SSRF-guarded source imports, generated SVG cards, browser-only PNG rasterization, clipboard copy, and download fallback.
- Added manual publication recording, 48-hour and 7-day snapshot attribution, performance summaries, deterministic weekly recommendations, evergreen recycling, and bounded plan re-weighting.
- Added a colour-coded unified calendar, account-wide filters and ICS export, Growth defaults, and atomic multi-repository planning with pillar-date deconfliction.
- Publishing remains copy-paste only: Gitdeck stores no social credentials and sends no outbound social posts.

## [1.0.8](https://github.com/debba/gitdeck/compare/v1.0.7...v1.0.8) (2026-09-03)


Expand Down
6 changes: 4 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG NODE_BUILDER_VERSION=22-slim
ARG NODE_RUNTIME_VERSION=22-alpine
ARG NODE_RUNTIME_VERSION=22-slim

FROM node:${NODE_BUILDER_VERSION} AS builder
WORKDIR /app
Expand All @@ -12,7 +12,8 @@ COPY CHANGELOG.md ./
COPY src ./src
COPY public ./public

RUN npm run build
RUN npm run build \
&& npm prune --omit=dev


FROM node:${NODE_RUNTIME_VERSION} AS runtime
Expand All @@ -23,6 +24,7 @@ ENV NODE_ENV=production \
PORT=8765

COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/index.html ./index.html
COPY docker-entrypoint.sh ./docker-entrypoint.sh
Expand Down
114 changes: 106 additions & 8 deletions README.md

Large diffs are not rendered by default.

9 changes: 8 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,15 @@ services:
environment:
GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:?set GITHUB_CLIENT_ID in env or .env}
GITHUB_OAUTH_SCOPES: ${GITHUB_OAUTH_SCOPES:-}
AI_PROVIDER: ${AI_PROVIDER:-}
AI_API_KEY: ${AI_API_KEY:-}
AI_MODEL: ${AI_MODEL:-}
AI_BASE_URL: ${AI_BASE_URL:-}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
OPENAI_DIGEST_MODEL: ${OPENAI_DIGEST_MODEL:-}
OPENAI_MODEL: ${OPENAI_MODEL:-}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
GEMINI_API_KEY: ${GEMINI_API_KEY:-}
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
volumes:
- gitdeck-data:/home/node/.gitdeck

Expand Down
Binary file added docs/images/growth-studio-home-dark-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/growth-studio-home-light-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/growth-studio-queue-dark-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions growth-studio-project/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.runtime/
89 changes: 89 additions & 0 deletions growth-studio-project/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Growth Studio project (ralph loop)

This directory is the single tracked home for turning GitDeck's Growth Studio
into a first-class, self-contained mode of the application: a dedicated shell
at `/growth`, a repository-centric workspace, a real editorial calendar with
AI-generated, media-complete content, and a measure-and-learn loop.

Hard constraints (never violated by any task):

- **The rest of GitDeck keeps working unchanged.** Inbox, repositories,
issues, pull requests, insights, alerts, CI, digests, board and preferences
keep their routes, layout and behavior. Only the `goals` tab is replaced by
the Growth Studio entry.
- **Rules from `AGENTS.md` apply**: English identifiers, comments, docs and
commit messages; pure business logic in `src/utils` with mirrored tests
under `tests/utils`; tests never inside `src`; GitHub API access stays behind
server-side endpoints; no unrelated refactors mixed with feature work.
- **Both locales.** Every new UI string exists in `src/i18n/en.ts` and
`src/i18n/it.ts` (see `docs/translations.md`).
- **Local-first and copy-paste publishing.** No social network credentials are
stored; content is copied (text and image) by the user. Media is mandatory
for a post to reach the `ready` state.
- **Existing goals data is preserved.** Migrations are additive and idempotent.

## Layout

- `docs/GS_PLAN.md`: architecture, data model, AI pipeline, phases, standard task loop.
- `docs/GS_FEATURE_MATRIX.md`: authoritative feature inventory and status.
- `docs/GS_DECISIONS.md`: settled decisions with their rationale.
- `tasks/`: task specifications and the authoritative `PROGRESS.md` ledger.
- `scripts/run-gs-tasks.sh`: the ralph loop runner (headless pi or Claude Code sessions).
- `scripts/validate-gs-task.sh`: the local validation gate run after every task.
- `.runtime/`: ignored runner locks, state, logs and gate cache, created on first execution.

## Run the loop

```bash
git checkout -b feat/growth-studio # once, from the branch holding the goals work
growth-studio-project/scripts/run-gs-tasks.sh
```

With no task IDs, the runner reads `tasks/PROGRESS.md` and starts at the first
`PENDING` task, then continues in lexical order, re-scanning the ledger after
every task so tasks authored mid-run (by phase-opening tasks) are picked up.
Explicit task IDs are supported:

```bash
growth-studio-project/scripts/run-gs-tasks.sh GS-010 GS-011
```

Each task runs as one non-interactive agent session on the loop branch
(`feat/growth-studio` by default, override with `GS_LOOP_BRANCH`). After the
session the runner re-runs the validation gate itself; a failed gate starts a
focused repair session that amends the same task commit, up to
`GS_LOOP_REPAIR_ATTEMPTS` times (default 3).

The gate runs `npm run typecheck`, `npm test` and `npm run build`, plus guards
for whitespace errors, tests placed under `src/`, and the presence of both
locale files. Successful stages are cached for six hours, keyed by a hash of
all relevant tracked and non-ignored inputs; any source, test, lockfile or
config change forces the checks to run again. Set `GS_VALIDATION_CACHE=0` to
force every check, or configure the lifetime with `GS_VALIDATION_CACHE_TTL`.

## Telegram notifications

```bash
export TELEGRAM_BOT_TOKEN=...
export TELEGRAM_CHAT_ID=...
```

Start, finish, repair and failure notifications carry the global completed-task
percentage from `tasks/PROGRESS.md`, prefixed with `[gitdeck-gs]`. Both
variables must be set together; dry runs never send external notifications.

## Options

```
--agent AGENT CLI agent running the sessions: pi or claude (default: pi)
--model MODEL Model override for the selected agent
--thinking LEVEL Thinking level, pi agent only (default: high)
--live / --no-live Stream agent activity to the terminal (default: auto by TTY)
--no-notify Disable desktop notifications
--dry-run Print the sessions that would run
--force Run tasks even when PROGRESS.md says COMPLETED
```

Defaults can also be set via `GS_LOOP_AGENT`, `GS_LOOP_MODEL`,
`GS_LOOP_THINKING`, `GS_LOOP_BRANCH`, `GS_LOOP_LIVE`, `GS_LOOP_REPAIR_ATTEMPTS`,
`GS_LOOP_MAX_TASKS`, `GS_VALIDATION_CACHE` and `GS_VALIDATION_CACHE_TTL`.
Loading