@pikku/cli 0.12.82 → 0.12.83
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/cli.schema.json +1 -1
- package/console-app/assets/{index-ChcXIEhS.js → index-CN_U0k_D.js} +154 -144
- package/console-app/assets/{index-DwyRdRuZ.css → index-CpHRlBt-.css} +1 -1
- package/console-app/index.html +2 -2
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +21 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +60 -3
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +6 -12
- package/dist/.pikku/function/pikku-function-types.gen.js +3 -12
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +190 -12
- package/dist/.pikku/function/pikku-functions.gen.js +15 -1
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -24
- package/dist/.pikku/http/pikku-http-types.gen.js +2 -24
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +4 -1
- package/dist/.pikku/pikku-services.gen.js +3 -0
- package/dist/.pikku/pikku-types.gen.d.ts +2 -1
- package/dist/.pikku/pikku-types.gen.js +3 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +9 -0
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +13 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuGraphWiringsOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuImportN8nInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuScopesInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuWebhookOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/ScopesAuditInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/ScopesPruneInput.schema.json +1 -0
- package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +5 -0
- package/dist/.pikku/scopes/pikku-scope-types.gen.js +4 -0
- package/dist/.pikku/scopes/pikku-scopes-meta.gen.json +1 -0
- package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +35 -0
- package/dist/.pikku/scopes/pikku-scopes.gen.js +27 -0
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets-meta.gen.json +1 -0
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +11 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +11 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables-meta.gen.json +1 -0
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +11 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +13 -3
- package/dist/.pikku/workflow/meta/allWorkflow.gen.json +48 -6
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +4 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/cli.wiring.js +47 -4
- package/dist/src/deploy/analyzer/analyzer.js +6 -0
- package/dist/src/fabric/fabric-commands.d.ts +3 -3
- package/dist/src/fabric/functions/llm-key.function.d.ts +4 -4
- package/dist/src/functions/commands/bootstrap.js +3 -0
- package/dist/src/functions/commands/dev.js +14 -3
- package/dist/src/functions/commands/enable.d.ts +1 -0
- package/dist/src/functions/commands/enable.js +10 -5
- package/dist/src/functions/commands/import-n8n.d.ts +10 -0
- package/dist/src/functions/commands/import-n8n.js +130 -0
- package/dist/src/functions/commands/info.js +0 -13
- package/dist/src/functions/commands/new-addon.js +33 -35
- package/dist/src/functions/commands/pikku-command-bootstrap.js +6 -0
- package/dist/src/functions/commands/scopes-audit.d.ts +1 -0
- package/dist/src/functions/commands/scopes-audit.js +37 -0
- package/dist/src/functions/commands/scopes-prune.d.ts +14 -0
- package/dist/src/functions/commands/scopes-prune.js +50 -0
- package/dist/src/functions/commands/scopes-shared.d.ts +39 -0
- package/dist/src/functions/commands/scopes-shared.js +83 -0
- package/dist/src/functions/commands/serve.js +4 -2
- package/dist/src/functions/commands/skills.js +18 -10
- package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +2 -1
- package/dist/src/functions/wirings/console/serialize-console-functions.js +6 -0
- package/dist/src/functions/wirings/credentials/serialize-credentials-types.js +22 -0
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types.js +2 -2
- package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +14 -16
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +6 -2
- package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -0
- package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.js +21 -0
- package/dist/src/functions/wirings/graph/serialize-graph-wirings.d.ts +5 -0
- package/dist/src/functions/wirings/graph/serialize-graph-wirings.js +14 -0
- package/dist/src/functions/wirings/http/serialize-http-types.js +2 -30
- package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +1 -0
- package/dist/src/functions/wirings/package/pikku-command-package-types.js +14 -1
- package/dist/src/functions/wirings/package/serialize-package-types.d.ts +1 -0
- package/dist/src/functions/wirings/package/serialize-package-types.js +5 -0
- package/dist/src/functions/wirings/permissions/pikku-command-permissions.js +1 -3
- package/dist/src/functions/wirings/permissions/serialize-permissions-imports.d.ts +6 -1
- package/dist/src/functions/wirings/permissions/serialize-permissions-imports.js +7 -64
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +5 -0
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +20 -0
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -0
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +8 -3
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +7 -0
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.js +34 -0
- package/dist/src/functions/wirings/scopes/serialize-scopes-types.d.ts +15 -0
- package/dist/src/functions/wirings/scopes/serialize-scopes-types.js +86 -0
- package/dist/src/functions/wirings/secrets/serialize-secrets-types.js +13 -0
- package/dist/src/functions/wirings/variables/serialize-variables-types.js +15 -2
- package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -0
- package/dist/src/functions/wirings/webhook/pikku-command-webhook.js +25 -0
- package/dist/src/functions/wirings/webhook/serialize-webhook.d.ts +14 -0
- package/dist/src/functions/wirings/webhook/serialize-webhook.js +34 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +29 -0
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +3 -0
- package/dist/src/functions/workflows/all.workflow.js +23 -3
- package/dist/src/services.d.ts +1 -0
- package/dist/src/services.js +1 -0
- package/dist/src/utils/pikku-cli-config.js +20 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
- package/skills/pikku-addon/SKILL.md +7 -3
- package/skills/pikku-ai-agent/SKILL.md +6 -3
- package/skills/pikku-ai-vercel/SKILL.md +6 -3
- package/skills/pikku-ai-voice/SKILL.md +6 -3
- package/skills/pikku-audit/SKILL.md +10 -3
- package/skills/pikku-aws/SKILL.md +9 -5
- package/skills/pikku-backblaze/SKILL.md +4 -3
- package/skills/pikku-better-auth/SKILL.md +10 -5
- package/skills/pikku-cli/SKILL.md +6 -3
- package/skills/pikku-concepts/SKILL.md +9 -4
- package/skills/pikku-concepts/references/concept-mapping.md +12 -10
- package/skills/pikku-config/SKILL.md +9 -5
- package/skills/pikku-cron/SKILL.md +6 -3
- package/skills/pikku-deploy-azure/SKILL.md +5 -3
- package/skills/pikku-deploy-cloudflare/SKILL.md +5 -3
- package/skills/pikku-deploy-express/SKILL.md +6 -3
- package/skills/pikku-deploy-fastify/SKILL.md +6 -3
- package/skills/pikku-deploy-lambda/SKILL.md +6 -3
- package/skills/pikku-deploy-nextjs/SKILL.md +5 -3
- package/skills/pikku-deploy-uws/SKILL.md +7 -4
- package/skills/pikku-deps/SKILL.md +13 -6
- package/skills/pikku-emails/SKILL.md +10 -5
- package/skills/pikku-feature/SKILL.md +1 -1
- package/skills/pikku-gateway-slack/SKILL.md +6 -3
- package/skills/pikku-http/SKILL.md +15 -21
- package/skills/pikku-http/references/http-options.md +0 -2
- package/skills/pikku-info/SKILL.md +9 -4
- package/skills/pikku-jose/SKILL.md +6 -3
- package/skills/pikku-kysely/SKILL.md +13 -5
- package/skills/pikku-machine-auth/SKILL.md +9 -3
- package/skills/pikku-mcp/SKILL.md +7 -3
- package/skills/pikku-middleware/SKILL.md +11 -6
- package/skills/pikku-mongodb/SKILL.md +8 -5
- package/skills/pikku-n8n-import/SKILL.md +109 -0
- package/skills/pikku-n8n-import/SPEC.md +84 -0
- package/skills/pikku-n8n-import/references/addon-mapping.md +121 -0
- package/skills/pikku-n8n-import/references/code-translation.md +121 -0
- package/skills/pikku-n8n-import/references/loops-and-control.md +87 -0
- package/skills/pikku-permissions/SKILL.md +26 -15
- package/skills/pikku-pino/SKILL.md +5 -3
- package/skills/pikku-product-second-opinion/README.md +43 -0
- package/skills/pikku-product-second-opinion/SKILL.md +158 -0
- package/skills/pikku-product-second-opinion/example/sample-report.md +90 -0
- package/skills/pikku-product-second-opinion/references/report-template.md +73 -0
- package/skills/pikku-queue/SKILL.md +7 -4
- package/skills/pikku-redis/SKILL.md +9 -6
- package/skills/pikku-rpc/SKILL.md +7 -4
- package/skills/pikku-rtl/SKILL.md +1 -1
- package/skills/pikku-scenario/SKILL.md +215 -0
- package/skills/pikku-schedule/SKILL.md +6 -3
- package/skills/pikku-schema-ajv/SKILL.md +5 -3
- package/skills/pikku-schema-cfworker/SKILL.md +6 -3
- package/skills/pikku-security/SKILL.md +8 -4
- package/skills/pikku-services/SKILL.md +8 -4
- package/skills/pikku-software-archaeology/README.md +70 -0
- package/skills/pikku-software-archaeology/SKILL.md +186 -0
- package/skills/pikku-software-archaeology/references/blueprint.schema.json +625 -0
- package/skills/pikku-software-archaeology/references/pikku-mapping.md +49 -0
- package/skills/pikku-software-archaeology/scripts/validate.mjs +173 -0
- package/skills/pikku-template-clone/SKILL.md +1 -1
- package/skills/pikku-trigger/SKILL.md +7 -3
- package/skills/pikku-versioning/SKILL.md +7 -3
- package/skills/pikku-websocket/SKILL.md +8 -4
- package/skills/pikku-workflow/SKILL.md +7 -3
- package/skills/pikku-ws/SKILL.md +5 -3
- package/skills/pikku-n8n-addon-map/SKILL.md +0 -178
- package/skills/pikku-n8n-code-translate/SKILL.md +0 -166
- package/skills/pikku-testing/SKILL.md +0 -328
- package/skills/pikku-testing/references/cucumber-bdd-testing.md +0 -176
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pikku-pino
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
description: >-
|
|
4
|
+
Use when setting up structured logging with Pino in a Pikku app. Covers PinoLogger setup and log
|
|
5
|
+
levels. TRIGGER when: code uses PinoLogger, user asks about structured logging, Pino, or
|
|
6
|
+
@pikku/pino. DO NOT TRIGGER when: user asks about ConsoleLogger (use pikku-services) or general
|
|
7
|
+
service setup.
|
|
6
8
|
---
|
|
7
9
|
|
|
8
10
|
# Pikku Pino (Structured Logging)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# pikku-product-second-opinion
|
|
2
|
+
|
|
3
|
+
Turns a `pikku-software-archaeology` blueprint into a **plain-language report for a
|
|
4
|
+
non-technical owner** — a founder/PM stuck with an app they didn't build.
|
|
5
|
+
Explains how it works and how it could be better, in business terms.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Existing repo → pikku-software-archaeology → .knowledge/ blueprint → pikku-product-second-opinion → founder report
|
|
9
|
+
(facts) (extract) (machine-readable) (translate + advise) (markdown + web page)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## The split from pikku-software-archaeology
|
|
13
|
+
|
|
14
|
+
- **pikku-software-archaeology** extracts *facts* into `.knowledge/` for a machine (Pikku) to rebuild from. Engineer/generator audience.
|
|
15
|
+
- **pikku-product-second-opinion** reads that blueprint and writes an *opinionated report* for a human to decide from. Non-technical audience.
|
|
16
|
+
|
|
17
|
+
One extracts; one advises. This skill consumes the other's output — it doesn't re-read the code.
|
|
18
|
+
|
|
19
|
+
## What the report is calibrated to (locked by the author)
|
|
20
|
+
|
|
21
|
+
- **Layered depth** — a one-page executive summary, then a section per major area for anyone who wants detail.
|
|
22
|
+
- **Direct but fair tone** — names problems plainly, always with why-it-matters and credit for what's good.
|
|
23
|
+
- **Both formats** — a markdown copy in the repo plus a clean, shareable web page (rendered via the `artifact-design` skill).
|
|
24
|
+
|
|
25
|
+
## The rules that make it work
|
|
26
|
+
|
|
27
|
+
1. **Translate, don't dump.** Every technical concept becomes a business outcome or a plain description. The jargon→plain table is in `SKILL.md`.
|
|
28
|
+
2. **Every problem carries impact + severity + effort.** A problem with no "what it means for you" doesn't ship.
|
|
29
|
+
3. **Always credit what works.** All-criticism reports get dismissed.
|
|
30
|
+
4. **Argue improvements in business outcomes** (more reliable / faster / cheaper / safer / easier to hand off), and say whether each is a cheap **rewire** or an expensive **rebuild** — never recommend a rewrite just because the code is messy.
|
|
31
|
+
5. **Mark confidence.** Certain and "I'd need to check" are different sentences.
|
|
32
|
+
6. **Cover the frontend and the other ways the app is used** when the blueprint has them — walk the screens as a journey, call out consistency, and flag the custom-logic pieces (charts/tables/editors) as the real work vs the cheap standard pieces. Name the ways the product can be driven (people/web, developers/API+SDK, AI agents/MCP, power users/CLI) — often a genuine strength.
|
|
33
|
+
7. **Give honest technology tradeoffs — both sides.** Every stack bet (framework, auth, hosting, key libraries) gets what-it-buys AND what-it-costs in business terms, tied to the founder's stage/goals. Don't cheerlead, don't trash, and **don't soften the disadvantages**. The app's own bets are derived from the blueprint (`architecture.json`/`integrations.json`/`frontend.json` + the repo's manifest) — never from a list in the skill, because a verdict you could write before reading the blueprint isn't a second opinion. Separately, and only when a rebuild is actually being recommended, the target stack (Pikku, Better Auth, TanStack Start) gets the *same* both-sides treatment with cons first-class — pinning someone's dependency for being pre-1.0 while staying quiet about the replacement being pre-1.0 too is a pitch, not an opinion.
|
|
34
|
+
|
|
35
|
+
## Files
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
pikku-product-second-opinion/
|
|
39
|
+
├── SKILL.md # method + voice rules + red flags
|
|
40
|
+
├── README.md # this file
|
|
41
|
+
├── references/report-template.md # the layered structure to fill in
|
|
42
|
+
└── example/sample-report.md # worked example (competitor-tracking area, founder voice)
|
|
43
|
+
```
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pikku-product-second-opinion
|
|
3
|
+
description: 'Use when a non-technical owner (founder, PM, operator) wants a plain-language report on an app they hold but did not build — explaining how it works and how it could be better. Reads the .knowledge/ blueprint from pikku-software-archaeology and produces a layered, jargon-free report that credits what works, names what does not (with business impact + effort), and argues an opinionated better design. TRIGGER: "explain how my app works", "what would you do differently", "review my app for a non-technical audience", "I inherited/am stuck with an agency-built app", "is this built well?". DO NOT TRIGGER for: extracting the machine-readable blueprint itself (use pikku-software-archaeology), or an engineer-facing technical code review.'
|
|
4
|
+
installGroups: [fabric]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Product Second Opinion
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Turn an extracted product blueprint into a **report a non-technical owner can act on**. Two jobs, in one voice: (1) explain, in plain language, how the app they're stuck with actually works; (2) give an honest, opinionated second opinion — what's solid, what's holding them back, and how you'd build it better, argued in business outcomes, not architecture.
|
|
12
|
+
|
|
13
|
+
The reader is a founder/PM/operator, not an engineer. If they finish a section and don't know what it means for their business or what to do about it, the report failed — no matter how correct it is.
|
|
14
|
+
|
|
15
|
+
**REQUIRED INPUT:** the `.knowledge/` blueprint produced by **pikku-software-archaeology**. If none exists, run that skill first — this one consumes its output (`product.json`, `domains.json`, `workflows.json`, `gaps.json`, `invariants.json`, `migration.json`, and any `parity-*.md`), it does not re-derive facts from the code. When the optional consumer-surface files are present (`interfaces.json`, `frontend.json`, `frontend-routes.json`, `frontend-components.json`), cover them too — see "The frontend and the other ways your app is used" and "Technology choices" below.
|
|
16
|
+
|
|
17
|
+
## The cardinal rule: translate, don't dump
|
|
18
|
+
|
|
19
|
+
Every technical concept becomes a business outcome or a plain-language description. Never make the reader learn your vocabulary. If a term is unavoidable, define it in one clause the first time — but prefer describing the *effect* and skipping the term entirely.
|
|
20
|
+
|
|
21
|
+
| Don't write | Write instead (describe the effect) |
|
|
22
|
+
|---|---|
|
|
23
|
+
| queue / worker / job | "a background task that runs on its own" |
|
|
24
|
+
| workflow | "a multi-step task that resumes where it left off if interrupted" |
|
|
25
|
+
| API / endpoint / route | "something the app (or another tool) can ask it to do" |
|
|
26
|
+
| webhook | "an automatic message the app sends to another tool when something happens" |
|
|
27
|
+
| event | "a signal that something happened, that other parts can react to" |
|
|
28
|
+
| cron / scheduler | "a timer that runs something on a schedule" |
|
|
29
|
+
| schema / migration | "the shape of your stored data" / "a change to how data is stored" |
|
|
30
|
+
| auth / session / token | "how the app knows who you are and what you're allowed to do" |
|
|
31
|
+
| refactor / rewire | "reorganizing the inside without changing what it does" |
|
|
32
|
+
| cache | "a saved copy kept around for speed" |
|
|
33
|
+
| race condition | "two things happening at once and stepping on each other" |
|
|
34
|
+
| component | "a reusable piece of the screen (a button, a chart, a table)" |
|
|
35
|
+
| route / page | "a screen in the app" |
|
|
36
|
+
| design system / component library | "the shared kit of screen pieces that keeps everything looking consistent" |
|
|
37
|
+
| SSR / SPA / rendering | "how pages get built and shown" (only mention if it affects speed or SEO) |
|
|
38
|
+
| MCP server | "a way for AI assistants to use your app's data and actions directly" |
|
|
39
|
+
| SDK | "a ready-made toolkit so other developers can build on your app" |
|
|
40
|
+
| CLI | "a way to drive the app by typing commands (for power users / automation)" |
|
|
41
|
+
| theme token / design variable | "a single setting (like your brand color) reused everywhere, so you change it once" |
|
|
42
|
+
| modal / drawer | "a pop-up box" / "a slide-out panel" |
|
|
43
|
+
|
|
44
|
+
When in doubt, say what the *user or the business* experiences, not what the machine does.
|
|
45
|
+
|
|
46
|
+
## Report structure (layered — skim or dive)
|
|
47
|
+
|
|
48
|
+
Write these three parts in order. A reader can stop after Part 1.
|
|
49
|
+
|
|
50
|
+
**Part 1 — Executive summary (one page).**
|
|
51
|
+
- *What you have*: 2–3 sentences — what the product does and who uses it.
|
|
52
|
+
- *The headline*: the 3–5 biggest risks/opportunities, one plain line each.
|
|
53
|
+
- *Recommended order*: a table (Fix | Why it matters | Effort | Payoff). This is the part they act on.
|
|
54
|
+
|
|
55
|
+
**Part 2 — One section per major area** (drive the areas from `domains.json`; skip domains with nothing worth saying). Each section follows this shape (see `example/sample-report.md`):
|
|
56
|
+
- *What this does* — the capability in business terms.
|
|
57
|
+
- *How it works today* — a plain walkthrough, ideally as a small story ("on a timer, the app re-reads each site, compares…").
|
|
58
|
+
- *What's working* — genuine credit. Never skip this; a report that's all criticism gets dismissed.
|
|
59
|
+
- *What's holding you back* — each problem MUST carry: **what it means for you** (business impact), **severity** (Minor / Worth fixing / Serious / Urgent), and **effort** (Small / Medium / Large).
|
|
60
|
+
- *How I'd do it differently — and why it's worth it* — the opinionated part. Argue the improvement in one of these business outcomes: **more reliable / fewer surprises**, **faster to add features**, **cheaper to run**, **safer / less risk**, **easier to maintain or hand off**. Be explicit whether it's a cheap rewire or an expensive rebuild.
|
|
61
|
+
|
|
62
|
+
**Part 3 — Appendix.**
|
|
63
|
+
- *How confident am I* — REQUIRED. Where you're certain vs guessing; what you'd verify against real data first. The blueprint carries confidence tiers — anything you're relaying from a `low`/`medium` entry, or from a reconstructed (`explicit: false`) event, says so here.
|
|
64
|
+
- *Glossary* (optional) — only for any term that slipped through.
|
|
65
|
+
|
|
66
|
+
## Rewire vs rebuild (say which)
|
|
67
|
+
|
|
68
|
+
The blueprint's `migration.json` tells you which is which — `mappings[]` is what survives (each with its `recommendation`), `dropped[]` is what goes. The reader needs to know because the cost is 10× different.
|
|
69
|
+
- **Rewire** — the valuable machinery exists; you're connecting pieces or turning something on. Cheap, low-risk. (Most "it should be automatic but isn't" findings are this.)
|
|
70
|
+
- **Rebuild** — the capability doesn't exist or is fundamentally wrong. Expensive, risky. Reserve the word for when it's true; founders hear "rewrite" and panic or overspend.
|
|
71
|
+
|
|
72
|
+
Never recommend a full rewrite because the code is messy. Messy-but-working is a rewire-over-time story, not a bonfire.
|
|
73
|
+
|
|
74
|
+
## The frontend and the other ways your app is used
|
|
75
|
+
|
|
76
|
+
When the blueprint has the consumer-surface files, add these to the report — they're often where a founder's questions actually live ("why does the app feel inconsistent?", "can partners build on this?").
|
|
77
|
+
|
|
78
|
+
**The screens (`frontend-*.json`) — one area section, founder-framed.**
|
|
79
|
+
- *What a user can do* — walk the main screens as a journey, not a component list.
|
|
80
|
+
- *Consistency* — is it built from one shared kit of screen pieces, or a patchwork? A consistent kit means changes are cheap and the app feels coherent; a patchwork means every change is bespoke and the look drifts. Say which, plainly.
|
|
81
|
+
- *The expensive pieces* — this is the key frontend insight. Most of the screen is standard pieces that are cheap to rebuild or restyle. A **small number carry real custom logic** — a bespoke chart, a complicated data table, a drawing/drag interaction, a rich editor. Those are the parts that take real effort to move or change, and the ones most likely to break. Name them, say what they do, and flag them as the real work — so nobody assumes "it's just screens, it'll be quick."
|
|
82
|
+
- *Design consistency (the "it looks a bit off" problems)* — from the blueprint's design findings, call out broken patterns in plain terms and, crucially, why each matters and roughly what it costs to fix. Common ones and how to frame them:
|
|
83
|
+
- **The same action behaves differently in different places** (a slide-out panel here, a pop-up box there for the same task). *Why it matters:* the app feels inconsistent and users have to re-learn each screen. *Fix:* pick one pattern and apply it everywhere — cheap.
|
|
84
|
+
- **Colors/spacing are hardcoded instead of set in one place.** *Why it matters:* changing your brand color, or fixing contrast, means hunting through every screen instead of editing one setting — slow and error-prone. *Fix:* move them to shared "design tokens" — a small, high-leverage cleanup.
|
|
85
|
+
- **The same element looks different from page to page** (buttons, headings, cards). *Why it matters:* reads as unpolished and erodes trust, especially in a paid product. *Fix:* one shared version of each, reused — cheap and makes every future change faster.
|
|
86
|
+
These are almost always **cheap rewires with an outsized polish/trust payoff**, not rebuilds. Give each an effort (usually Small–Medium) and say the payoff is perceived quality + faster future changes. Do NOT design-nitpick without a reason — every design point needs a "why it matters to you." And credit consistency where the app already has it.
|
|
87
|
+
- Frame rebuild/restyle work as **rewire vs rebuild**: restyling standard pieces to a consistent kit is cheap; re-creating a custom-logic piece is real engineering.
|
|
88
|
+
|
|
89
|
+
**How your app can be driven (`interfaces.json`) — usually a short, positive section.**
|
|
90
|
+
Explain, in one line each, the ways the product can be used: people through the web, developers through an API or toolkit, AI assistants through a direct connection (MCP), power users through the command line. This is often a genuine strength worth naming — an app that agents and partners can build on is more valuable than one only humans can click. But be honest about `status`: a connection that exists but only does two things is a *start*, not a feature — say so.
|
|
91
|
+
|
|
92
|
+
## Technology choices — the honest tradeoffs (don't be cheap on the cons)
|
|
93
|
+
|
|
94
|
+
The app made specific technology bets. The founder deserves to know what each bet *bought* and what it *costs* — in business terms, tied to their situation (early vs scaling, chasing enterprise deals or not, big team or two people). Present every significant choice as a genuine tradeoff with **both sides**. Never cheerlead a technology, and never trash one — but do not soften the disadvantages to sound positive. A report that only lists upsides is not honest and is not useful.
|
|
95
|
+
|
|
96
|
+
Rules:
|
|
97
|
+
- For each notable choice (framework, auth, hosting, database, key libraries): **what it buys** and **what it costs**, both in plain business terms, then a recommendation tied to *their* stage and goals — usually "keep it, here's what to watch" rather than "switch."
|
|
98
|
+
- Tie cons to consequences the founder feels: vendor bills, security/breach liability, hiring difficulty, how fast they can ship, enterprise-sales blockers, the risk of betting on something young.
|
|
99
|
+
- Distinguish "younger / smaller community" (a real, manageable risk) from "wrong choice" (rare). Most stack choices are defensible; the job is informed eyes-open, not alarm.
|
|
100
|
+
- **Verify before you disparage.** "Don't be cheap on the cons" means ACCURATE cons, not invented ones. Do NOT label a technology immature, niche, or feature-poor from vibes, its name, or its age — check its actual adoption, maturity, and feature set first. And separate an **inherent tradeoff of an approach** (e.g. self-hosting anything means you run and secure it) from a **deficiency of a specific tool** (often false — the tool may be mature and full-featured). Overstating cons is as dishonest as hiding them.
|
|
101
|
+
- **Hold your own recommendation to the same bar.** If "how I'd do it differently" lands on a specific stack — Pikku included — it gets the same both-sides treatment as everything else, cons first-class. Pinning someone's dependency for being pre-1.0 while not mentioning that the replacement is pre-1.0 too isn't a second opinion, it's a pitch.
|
|
102
|
+
|
|
103
|
+
- **Derive the app's choices from the blueprint, never from a list in this file.** Read the stack off `architecture.json`, `integrations.json`, `frontend.json`, and the manifest the repo actually has (`package.json`, `Gemfile`, `go.mod`, …). Cover the bets that are *load-bearing for this product*: typically the framework, the auth/identity approach, the datastore, the hosting/deploy model, the payment and other critical vendor integrations, and anything the blueprint marks `replacementDifficulty: hard`. A choice earns a paragraph if switching it would be expensive, or if living with it constrains the business — not because it appears in some canonical list. If you could write the verdict before reading the blueprint, you are not giving a second opinion.
|
|
104
|
+
|
|
105
|
+
### The choices *this* app made
|
|
106
|
+
|
|
107
|
+
Whatever the blueprint shows. A Rails app's bets are Rails, Devise, Pundit, MySQL, Sidekiq, its ERP and payment vendors; a Go app's are different again. Fill in buys/costs/usually for each, from evidence. If a legacy choice is working fine, credit it and move on — "boring and working" is a feature, and the pressure to find something to say about a stack is exactly what produces dishonest reports.
|
|
108
|
+
|
|
109
|
+
Worth naming when it applies: adopting one coherent system in place of hand-rolled, drifted machinery (several ways of deciding who's an admin, a bespoke token table, a back-door test login, home-grown crypto) is a real reliability-and-security upgrade, not a lateral swap — say so when the blueprint's `gaps.json` and `policies.json` show that sprawl.
|
|
110
|
+
|
|
111
|
+
### The stack a rebuild would land on
|
|
112
|
+
|
|
113
|
+
Include this section **only if you are actually recommending a rebuild** onto it — and then give every part of it the same both-sides treatment you gave the app's own bets, per the "hold your own recommendation to the same bar" rule above. These are not choices the app made; they are choices you are proposing, which is exactly why their costs are the reader's to weigh. The Pikku target stack is Pikku + Better Auth + TanStack Start + Mantine; the framings below are reference material for the parts you actually recommend, not a script to recite.
|
|
114
|
+
|
|
115
|
+
**Better Auth (self-hosted sign-in) — instead of a paid service like Auth0/Clerk.**
|
|
116
|
+
- *Buys you:* a mature, battle-tested, **framework-agnostic** library with a deep first-class plugin catalog — two-factor auth, multi-tenancy/organizations, multi-session, rate limiting, Stripe subscription billing, an admin panel, API keys for partners/automation, single-sign-on — plus a plugin system to add more without forking. You keep your users in your own database (single source of truth, no per-user bill that grows with success), with full control of the auth flows, and you can run it embedded in the app or as a standalone self-hosted auth server. So self-hosting here means neither giving up features nor rolling your own security.
|
|
117
|
+
- *Cleans up messy auth (often the biggest win):* adopting it consolidates the kind of hand-rolled, drifted auth that accumulates in an older codebase — several different ways of deciding who's an admin, a bespoke token table, a back-door test login, home-grown encryption — into **one coherent system**. If the blueprint shows a before (legacy, bespoke) and after (on Better Auth), point at it directly: the sprawl collapses into a single well-structured setup. A concrete reliability-and-security upgrade, not just a swap.
|
|
118
|
+
- *Costs you (the honest tradeoff — operational, not security-implementation):* the auth flows and security practices are handled by the library, so this is NOT "build secure auth from scratch." What self-hosting means is you **operate** it — hosting, upgrades, uptime, and incident response sit with your team, where a paid SaaS runs that for you and bundles hosted extras (bot/anomaly detection, leaked-password monitoring, vendor compliance certifications) you'd otherwise operate and document yourself. You trade a per-user bill and vendor ops for control, data ownership, and predictable cost.
|
|
119
|
+
- *Usually:* a strong default for an independent product — mature, full-featured, framework-agnostic, and frequently a genuine cleanup of inherited auth. The real question is who owns operating it, not whether the tool is good enough.
|
|
120
|
+
|
|
121
|
+
**TanStack Start (the web framework) — instead of the incumbent (Next.js).**
|
|
122
|
+
- *Buys you:* modern, tidy developer experience; strong type-safety that catches whole classes of bugs before users see them; fast iteration; fine-grained control; deploys well to modern/edge hosting. The libraries underneath it — the TanStack ecosystem (Query, Router, Table) — are mature, battle-tested and everywhere in React.
|
|
123
|
+
- *Costs you (the honest tradeoff — maturity of the framework itself):* separate the ecosystem from the framework. Query/Router/Table are mature; **TanStack Start, the framework that wraps them, has not shipped a stable 1.0** — its own maintainers describe it as a release candidate that is feature-complete with a stable API, and tell production users to lock to an exact version and follow the last-mile changes into 1.0. In practice that means pinning your version and budgeting for occasional upgrade work as it settles, rather than upgrading casually. On top of that it's newer than the incumbent (Next.js), which has the largest ecosystem — fewer ready-made templates and third-party examples, and a smaller (though growing) pool of developers who've used *this specific* framework, which can make hiring slightly slower.
|
|
124
|
+
- *Usually:* a credible, modern choice on a mature foundation, but a **pre-1.0 one** — so it carries pinning and upgrade risk that the incumbent does not. Reasonable if the team wants the type-safety and is willing to track the framework to 1.0; harder to justify if nobody has capacity to own upgrades.
|
|
125
|
+
|
|
126
|
+
**Pikku (the framework a rebuild would land on) — instead of staying where you are.**
|
|
127
|
+
- *Buys you:* one way to write a capability and drive it from anywhere — web, background jobs, timers, realtime, AI assistants, the command line — so a feature is written once instead of five times. Type-safe clients and the API spec fall out of the code rather than being hand-maintained until they drift. The sprawl an organically-grown app accumulates collapses into one shape a small team can hold in its head.
|
|
128
|
+
- *Costs you (the honest tradeoff — it is younger than anything it would replace):* Pikku has **not shipped a stable 1.0** — it's 0.12.x, and 0.13 is the first release that will promise backwards compatibility. Until then upgrades can break you. In practice: pin your version, budget for upgrade work, and know that the community, the ready-made examples, and the pool of developers who have used it are all far smaller than the incumbent's — smaller than TanStack Start's, let alone Next.js's. Being pre-1.0 is normal for a young framework, and survivable, but it is a real cost and it is the reader's to weigh, not yours to skip.
|
|
129
|
+
- *Usually:* worth it when the real problem is sprawl — many surfaces, hand-maintained glue, the same rule implemented three slightly different ways — and the team wants one shape instead of five. Harder to justify for an app that works and needs a few rewires: those are usually cheaper in place. If nobody has capacity to own upgrades, that's a real reason to wait.
|
|
130
|
+
|
|
131
|
+
Check these statuses before you write them up rather than repeating them from here — a framework's release stage moves, and the point is the current fact, not this example.
|
|
132
|
+
|
|
133
|
+
## Delivery
|
|
134
|
+
|
|
135
|
+
Produce **both**:
|
|
136
|
+
1. A **markdown** report in the repo (e.g. `docs/reports/<app>-second-opinion.md`) — versioned, diffable.
|
|
137
|
+
2. A **shareable web page**: load the **artifact-design** skill, then render the same report as one clean, print-friendly, theme-aware page they can send to a cofounder or the agency. Same content, nicer to read.
|
|
138
|
+
|
|
139
|
+
## Red flags — you're writing the wrong report
|
|
140
|
+
|
|
141
|
+
| Symptom | Fix |
|
|
142
|
+
|---|---|
|
|
143
|
+
| A technical term with no translation | Rephrase as the effect on the user/business, or cut the term. |
|
|
144
|
+
| A problem with no "what it means for you" | Incomplete — add the business impact or delete it. |
|
|
145
|
+
| All problems, no credit | You'll lose the reader's trust. Name what's genuinely good. |
|
|
146
|
+
| A recommendation with no effort + payoff | Not decision-useful. Add both. |
|
|
147
|
+
| "Rewrite the app" | Almost always wrong. Separate rewire (cheap) from rebuild (dear); lean on what `migration.json.mappings` says survives. |
|
|
148
|
+
| A guess stated as fact | Mark confidence. "I'm certain" and "I'd need to check" are different sentences. |
|
|
149
|
+
| Only listed the upsides of a technology choice | Not honest. Every bet has a cost — name it in business terms, don't soften it to sound positive. |
|
|
150
|
+
| Recommended a stack (including ours) without its cons | You applied a maturity bar to their technology and exempted your own. Both sides, or cut the recommendation. |
|
|
151
|
+
| Trashed a technology as "the wrong choice" | Equally lazy. Most choices are defensible; frame as tradeoff + "what to watch," not a verdict. |
|
|
152
|
+
| "The frontend is just screens, it'll be quick" | Wrong. The custom-logic pieces (charts, complex tables, editors) are real work — flag them separately from the cheap standard pieces. |
|
|
153
|
+
| A design point with no "why it matters" | Taste, not advice. Tie every design finding to user perception (polish/trust) or maintenance cost (change-once vs hunt-everywhere), plus effort. |
|
|
154
|
+
| Reads like a code review | Wrong audience. Would a founder know what to *do* after this paragraph? |
|
|
155
|
+
|
|
156
|
+
## Relationship to pikku-software-archaeology
|
|
157
|
+
|
|
158
|
+
`pikku-software-archaeology` = facts → `.knowledge/` blueprint, for a machine to rebuild from. **This skill** = blueprint → opinionated report, for a human to decide from. One extracts; one advises. Run archaeology first (or point this skill at an existing `.knowledge/`), then translate its `gaps.json` + `invariants.json` + `migration.json` into the business-language report above.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Your app, in plain English — and where it could get better
|
|
2
|
+
*A second opinion on the competitor-tracking system*
|
|
3
|
+
|
|
4
|
+
> Worked example for the pikku-product-second-opinion skill. Shows the voice and the
|
|
5
|
+
> layered structure on one real area (competitor tracking), drawn from a
|
|
6
|
+
> pikku-software-archaeology blueprint + parity report. A full report would repeat
|
|
7
|
+
> Part 2 for each major area, and cover every significant technology bet — not just
|
|
8
|
+
> the one shown here.
|
|
9
|
+
|
|
10
|
+
**How to read this:** no technical background needed. I'll explain what you have,
|
|
11
|
+
what's solid, and what I'd change — and for each change, what it costs and what
|
|
12
|
+
it buys you.
|
|
13
|
+
|
|
14
|
+
## Part 1 — The short version
|
|
15
|
+
|
|
16
|
+
**What you have.** A competitive-intelligence app: it watches your competitors'
|
|
17
|
+
websites, spots meaningful changes (pricing, hiring, product updates), summarizes
|
|
18
|
+
them, and feeds your briefings and dashboards so your team knows first.
|
|
19
|
+
|
|
20
|
+
**The headline.**
|
|
21
|
+
- The hard part — reading messy websites and telling a real change from noise — is built well.
|
|
22
|
+
- Until recently the app wasn't re-checking sites on its own at all *(now fixed)*.
|
|
23
|
+
- When it does spot a change, the follow-up work only happens if someone clicks a button — so your dashboards can quietly go stale while looking current.
|
|
24
|
+
|
|
25
|
+
**If it were me, this is the order I'd tackle things:**
|
|
26
|
+
|
|
27
|
+
| Fix | Why it matters to you | Effort | Payoff |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| Turn on automatic checking | Sites weren't refreshing themselves | *Done* | High |
|
|
30
|
+
| Make the follow-up automatic | Stops your intelligence going stale unnoticed | Medium | High |
|
|
31
|
+
| Make failures visible | Problems surface instead of hiding | Small | Medium |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Part 2 — Area by area
|
|
36
|
+
|
|
37
|
+
### Competitor tracking
|
|
38
|
+
|
|
39
|
+
**What this does.** Watches your competitors' sites for you and turns meaningful
|
|
40
|
+
changes into summaries your team can act on.
|
|
41
|
+
|
|
42
|
+
**How it works today.** Like a clipping service: on a timer, the app re-reads
|
|
43
|
+
each competitor's site, compares it to last time, decides whether anything
|
|
44
|
+
*meaningful* changed (it ignores trivial edits), and writes up a summary when
|
|
45
|
+
something real happens.
|
|
46
|
+
|
|
47
|
+
**What's working.** The expensive, valuable part is solid — the app is genuinely
|
|
48
|
+
good at reading messy sites, separating real changes from noise, and summarizing
|
|
49
|
+
them. Keep it.
|
|
50
|
+
|
|
51
|
+
**What's holding you back.**
|
|
52
|
+
- **The automatic checking wasn't switched on.** The machinery existed but nothing
|
|
53
|
+
pulled the trigger, so sites weren't refreshing on their own. What it means for
|
|
54
|
+
you: your "live" intelligence wasn't live. Severity: Urgent. Effort: Small.
|
|
55
|
+
*(Already fixed.)*
|
|
56
|
+
- **The follow-up is manual.** When a change is found, updating your briefings and
|
|
57
|
+
comparisons doesn't happen on its own — someone has to click "regenerate." What
|
|
58
|
+
it means for you: if nobody clicks, the dashboard shows old information while
|
|
59
|
+
looking up to date, and you can't trust it. Severity: Serious. Effort: Medium.
|
|
60
|
+
|
|
61
|
+
**How I'd do it differently — and why it's worth it.** Make the whole chain
|
|
62
|
+
finish as one task: when a change is found, the briefings and comparisons update
|
|
63
|
+
automatically as part of the same job, so "done" means "your intelligence is
|
|
64
|
+
actually current." And a failed step should show as a visible error, not vanish.
|
|
65
|
+
This is a **rewire, not a rebuild** — the valuable machinery stays; I'm connecting
|
|
66
|
+
pieces that already sit next to each other. Outcome: **more reliable, fewer
|
|
67
|
+
surprises** — which is the entire promise of the product.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### The technology bets
|
|
72
|
+
|
|
73
|
+
**Pikku — the framework I'm suggesting you rebuild onto.** *Buys you:* one way to
|
|
74
|
+
write a capability and drive it from anywhere — web, timers, background jobs,
|
|
75
|
+
assistants — so the tracking rule is written once instead of three times, which is
|
|
76
|
+
exactly the sprawl above. *Costs you:* it hasn't shipped a stable 1.0 (it's 0.12.x;
|
|
77
|
+
0.13 is the first release promising backwards compatibility), so until then
|
|
78
|
+
upgrades can break you — pin the version and budget for upgrade work. Its community
|
|
79
|
+
and hiring pool are far smaller than the mainstream default's. That's normal for a
|
|
80
|
+
young framework and survivable, but it's a real cost and it's yours to weigh.
|
|
81
|
+
*Usually:* worth it when the problem is genuinely sprawl, as it is here — and worth
|
|
82
|
+
waiting if nobody has capacity to own upgrades.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Part 3 — The fine print
|
|
87
|
+
|
|
88
|
+
**How confident am I.** High on both problems — I can see them directly. The fix
|
|
89
|
+
is a well-understood pattern rather than an experiment, though I'd want one live
|
|
90
|
+
test against your real data before calling it done.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Report template
|
|
2
|
+
|
|
3
|
+
Fill this in. Keep sentences short. Lead every point with what it means for the
|
|
4
|
+
reader. Delete any section that would be empty rather than padding it.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# {App name}, in plain English — and where it could get better
|
|
9
|
+
*A second opinion on {scope: the whole app / the competitor-tracking system / …}*
|
|
10
|
+
|
|
11
|
+
**How to read this:** no technical background needed. Part 1 is the summary — if
|
|
12
|
+
you read nothing else, read that. Parts 2–3 go area by area for anyone who wants
|
|
13
|
+
detail.
|
|
14
|
+
|
|
15
|
+
## Part 1 — The short version
|
|
16
|
+
|
|
17
|
+
**What you have.** {2–3 sentences: what the product does, who uses it.}
|
|
18
|
+
|
|
19
|
+
**The headline.** {3–5 bullets, one plain line each — the biggest risks and
|
|
20
|
+
opportunities. No jargon.}
|
|
21
|
+
|
|
22
|
+
**If it were me, this is the order I'd tackle things:**
|
|
23
|
+
|
|
24
|
+
| Fix | Why it matters to you | Effort | Payoff |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| {…} | {business impact} | Small/Medium/Large | High/Medium/Low |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Part 2 — Area by area
|
|
31
|
+
|
|
32
|
+
### {Area name, in business terms — e.g. "Competitor tracking"}
|
|
33
|
+
|
|
34
|
+
**What this does.** {the capability, as the business experiences it}
|
|
35
|
+
|
|
36
|
+
**How it works today.** {a plain walkthrough — a small story beats a diagram}
|
|
37
|
+
|
|
38
|
+
**What's working.** {genuine credit — the parts that are solid and worth keeping}
|
|
39
|
+
|
|
40
|
+
**What's holding you back.**
|
|
41
|
+
- **{Problem in plain terms}.** What it means for you: {business impact}.
|
|
42
|
+
Severity: {Minor / Worth fixing / Serious / Urgent}. Effort to fix: {Small /
|
|
43
|
+
Medium / Large}.
|
|
44
|
+
|
|
45
|
+
**How I'd do it differently — and why it's worth it.** {the better design in
|
|
46
|
+
outcomes: more reliable / faster to change / cheaper / safer / easier to hand
|
|
47
|
+
off. Say whether it's a cheap rewire or an expensive rebuild.}
|
|
48
|
+
|
|
49
|
+
{repeat per area}
|
|
50
|
+
|
|
51
|
+
### The technology bets
|
|
52
|
+
|
|
53
|
+
{One entry per significant choice — framework, sign-in, hosting, database, key
|
|
54
|
+
libraries — AND anything a rebuild would move them ONTO. Each gets both sides.}
|
|
55
|
+
|
|
56
|
+
**{Technology}.**
|
|
57
|
+
- *Buys you:* {in business terms}
|
|
58
|
+
- *Costs you:* {in business terms — bills, hiring, shipping speed, upgrade work,
|
|
59
|
+
the risk of betting on something young. Don't soften it. If it hasn't shipped a
|
|
60
|
+
stable 1.0, say so and say what that means: pin the version, budget upgrades.}
|
|
61
|
+
- *Usually:* {recommendation tied to their stage — normally "keep it, watch this"}
|
|
62
|
+
|
|
63
|
+
{The same bar applies to anything you're recommending they move to. A stack you
|
|
64
|
+
propose with no cons listed is a pitch, not a second opinion.}
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Part 3 — The fine print (optional)
|
|
69
|
+
|
|
70
|
+
**How confident am I.** {where you're certain vs guessing; what you'd verify
|
|
71
|
+
against real data before committing}
|
|
72
|
+
|
|
73
|
+
**A few words explained.** {glossary — only terms that couldn't be avoided}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pikku-queue
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
description: >-
|
|
4
|
+
Use when adding background job processing, async task queues, or distributed workers to a Pikku
|
|
5
|
+
app. Covers wireQueueWorker, job enqueuing, progress tracking, retries, BullMQ and PgBoss
|
|
6
|
+
adapters. TRIGGER when: code uses wireQueueWorker, user asks about background jobs, task queues,
|
|
7
|
+
async processing, BullMQ, PgBoss, or job retries. DO NOT TRIGGER when: user asks about scheduled
|
|
8
|
+
cron tasks (use pikku-cron) or event-driven triggers (use pikku-trigger).
|
|
6
9
|
installGroups: [core]
|
|
7
10
|
---
|
|
8
11
|
|
|
@@ -151,7 +154,7 @@ const jobId = await queue.add(
|
|
|
151
154
|
|
|
152
155
|
### Type-Safe Queue Publishing
|
|
153
156
|
|
|
154
|
-
After `npx pikku
|
|
157
|
+
After `npx pikku all`:
|
|
155
158
|
|
|
156
159
|
```typescript
|
|
157
160
|
import { PikkuQueue } from '.pikku/pikku-queue.gen.js'
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pikku-redis
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
description: >-
|
|
4
|
+
Use when setting up Redis-backed services in a Pikku app. Covers channel stores, workflow
|
|
5
|
+
services, secret services, event hubs, agent runs, and deployment services backed by Redis.
|
|
6
|
+
TRIGGER when: code uses RedisChannelStore, RedisWorkflowService, RedisSecretService, or user
|
|
7
|
+
asks about Redis setup with Pikku. DO NOT TRIGGER when: user asks about BullMQ queues (use
|
|
8
|
+
pikku-queue) or SQL databases (use pikku-kysely).
|
|
6
9
|
---
|
|
7
10
|
|
|
8
11
|
# Pikku Redis
|
|
@@ -51,10 +54,10 @@ const secrets = new RedisSecretService(
|
|
|
51
54
|
config: { kekSecret: string; salt: string }
|
|
52
55
|
)
|
|
53
56
|
|
|
54
|
-
await secrets.getSecret(key: string): Promise<
|
|
55
|
-
await secrets.
|
|
57
|
+
await secrets.getSecret<T = string>(key: string): Promise<T>
|
|
58
|
+
await secrets.getSecrets<T>(keys: (keyof T & string)[]): Promise<Partial<T>>
|
|
56
59
|
await secrets.hasSecret(key: string): Promise<boolean>
|
|
57
|
-
await secrets.
|
|
60
|
+
await secrets.setSecret(key: string, value: unknown): Promise<void>
|
|
58
61
|
await secrets.deleteSecret(key: string): Promise<void>
|
|
59
62
|
await secrets.rotateKEK(): Promise<number>
|
|
60
63
|
await secrets.close(): Promise<void>
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pikku-rpc
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
description: >-
|
|
4
|
+
Use when making internal function-to-function calls within a Pikku app, composing functions, or
|
|
5
|
+
exposing RPC endpoints. Covers rpc.invoke, rpc.remote, rpc.exposed, and generated RPC client.
|
|
6
|
+
TRIGGER when: code uses wire.rpc or expose: true, user asks about calling one Pikku function
|
|
7
|
+
from another, function composition, or RPC endpoints. DO NOT TRIGGER when: user asks about HTTP
|
|
8
|
+
routes (use pikku-http) or addon cross-package calls (use pikku-addon).
|
|
6
9
|
installGroups: [core]
|
|
7
10
|
---
|
|
8
11
|
|
|
@@ -108,7 +111,7 @@ RPC calls go through Pikku's middleware and permission pipeline. Direct imports
|
|
|
108
111
|
|
|
109
112
|
### Generated RPC Client
|
|
110
113
|
|
|
111
|
-
After `npx pikku
|
|
114
|
+
After `npx pikku all`:
|
|
112
115
|
|
|
113
116
|
```typescript
|
|
114
117
|
import { pikkuRPC } from '.pikku/pikku-rpc.gen.js'
|
|
@@ -17,7 +17,7 @@ Set `dir` **once at the document root** from the active locale, then let the
|
|
|
17
17
|
browser and Mantine mirror everything — _provided_ every custom style is written
|
|
18
18
|
**flow-relative** (start/end), never **physical** (left/right). Get those two
|
|
19
19
|
things right and Arabic, Hebrew, Farsi and Urdu all work with zero per-component
|
|
20
|
-
|
|
20
|
+
*layout* code — directional icons still need one manual step, covered below.
|
|
21
21
|
|
|
22
22
|
## Agent Operating Procedure
|
|
23
23
|
|