1049 lines
40 KiB
Markdown
1049 lines
40 KiB
Markdown
# Ideas Repo - Project Planning & Scaffolding
|
|
|
|
This repo is for discussing, planning, and scaffolding project ideas. **No actual development happens here** - once a project is set up, it gets cloned elsewhere for building.
|
|
|
|
## Related Workspaces
|
|
|
|
| Workspace | Path | Purpose |
|
|
| ---------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
| Tech Radar | /Users/davidherrera/TeamIDE/dcherrera/tech-radar | Personal tech radar for evaluating tools and technologies. Reference files here when making tech stack decisions for new projects. |
|
|
|
|
## Purpose
|
|
|
|
When the user comes here with a project idea:
|
|
|
|
1. Discuss and refine the idea
|
|
|
|
2. **Create the project folder FIRST** (e.g., `mkdir ProjectName`)
|
|
|
|
3. Create planning docs inside the project folder:
|
|
|
|
- **App projects:** `build_spec.md` and `build_plan.md`
|
|
|
|
- **Research projects:** `goals.md` and optionally `spec.md`
|
|
|
|
4. Scaffold the rest of the project (CLAUDE.md, structure, etc.)
|
|
|
|
5. Init git, create GitHub repo, push
|
|
|
|
6. Delete from this workspace (project now lives in its own repo)
|
|
|
|
## CRITICAL: Project Folder Rule
|
|
|
|
**ALWAYS create a project folder FIRST before writing any spec or plan files.**
|
|
|
|
```
|
|
# CORRECT - create folder first, then files inside it
|
|
mkdir /path/to/workspace/ProjectName
|
|
# App projects: create build_spec.md and build_plan.md INSIDE ProjectName/
|
|
# Research projects: create goals.md and spec.md INSIDE ProjectName/
|
|
|
|
# WRONG - never create spec/plan files at the workspace root
|
|
# Don't do: /path/to/workspace/build_spec.md
|
|
# Don't do: /path/to/workspace/goals.md
|
|
```
|
|
|
|
Every project gets its own folder from the very beginning. Planning docs (`build_spec.md`/`build_plan.md` for apps, `goals.md`/`spec.md` for research) belong inside that project folder, not at the workspace root.
|
|
|
|
## Templates Location
|
|
|
|
```
|
|
Ideation/templates/
|
|
├── claude.md # Standard project guidelines (copy + customize)
|
|
├── coding-best-practices.md # Coding conventions & style guide (copy as-is, read at Phase 1)
|
|
├── README.md # Standard README structure (copy + customize)
|
|
├── LICENSE # MIT Transparency License (copy as-is)
|
|
├── .gitignore # Standard ignores (copy as-is)
|
|
├── build.sh # Build script template (copy + customize app config)
|
|
├── scripts/
|
|
│ └── console-logger.ts # Tauri console logging boot file
|
|
├── docs/ # Documentation templates
|
|
│ ├── README.md # Docs index with table of contents
|
|
│ ├── TEMPLATE-feature.md # Template for feature documentation
|
|
│ ├── getting-started.md # Installation & setup guide
|
|
│ ├── architecture.md # Tech stack & architecture
|
|
│ ├── development.md # Development workflow guide
|
|
│ └── deployment.md # Build & deployment guide
|
|
│
|
|
│ # Starter Templates (complete working projects)
|
|
├── TauriStarter/ # Tauri + Quasar + Vite desktop app
|
|
├── ResearchStarter/ # R&D / research / experimental projects
|
|
├── [FutureStarter]/ # More starter templates to come...
|
|
│
|
|
│ # TeamIDE PM integration
|
|
└── teamide/
|
|
├── project.yml # .teamide/project.yml template (copy + update name)
|
|
└── README.md # Explanation of PM file generation
|
|
```
|
|
|
|
### Starter Templates
|
|
|
|
Starter templates are complete, working projects ready to build immediately. Each includes its own CLAUDE.md with full project guidelines.
|
|
|
|
| Template | Use Case |
|
|
| --------------- | --------------------------------------------------- |
|
|
| TauriStarter | Cross-platform desktop apps (macOS, Windows, Linux) |
|
|
| ResearchStarter | Research, experiments, and R&D investigations |
|
|
| More coming... | Web apps, native iOS/macOS, etc. |
|
|
|
|
## Workflow: Using a Starter Template
|
|
|
|
Use this workflow when a starter template exists for your project type (e.g., TauriStarter for desktop apps).
|
|
|
|
### Phase 1: Planning (in Ideation)
|
|
|
|
1. **Discuss the idea** - Refine requirements, features, scope
|
|
|
|
2. **Create the spec** - Write `build_spec.md` covering everything about the app
|
|
|
|
3. **Create the plan** - Write `build_plan.md` with phased task checklist
|
|
|
|
**For ResearchStarter projects:** Write `goals.md` (success criteria, anti-goals, kill gates) instead of `build_spec.md`. Optionally write `spec.md` if there's a concrete system to design. Milestone planning uses `docs/TEMPLATE-milestone.md` instead of `build_plan.md`.
|
|
|
|
### Phase 2: Scaffolding (in Ideation)
|
|
|
|
#### 1\. Copy the starter template
|
|
|
|
```
|
|
cp -r /Users/davidherrera/Obsidian/Ideation/templates/[StarterTemplate] /Users/davidherrera/Obsidian/Ideation/[ProjectName]
|
|
cd /Users/davidherrera/Obsidian/Ideation/[ProjectName]
|
|
cp ../templates/coding-best-practices.md ./coding-best-practices.md
|
|
```
|
|
|
|
#### 2\. Add spec and plan files
|
|
|
|
**App projects:** \`\`\`bash
|
|
|
|
# Move/copy the spec and plan we created during planning
|
|
|
|
mv ../build_spec.md ./build_spec.md mv ../build_plan.md ./build_plan.md \`\`\`
|
|
|
|
**Research projects (ResearchStarter):** The template already includes `goals.md` and `spec.md` — just fill them in with the content from Phase 1 planning. No need to move files.
|
|
|
|
#### 2.5. Generate TeamIDE PM files
|
|
|
|
Generate `.teamide/` project management files from `build_plan.md` so the project arrives at its dev repo with a ready-made task board. See the **TeamIDE PM Files** section below for the full conversion rules.
|
|
|
|
1. Copy `templates/teamide/project.yml` to `[ProjectName]/.teamide/project.yml` and update the `name:` field
|
|
|
|
2. Create `.teamide/plans/` and `.teamide/tasks/` directories
|
|
|
|
3. For each Phase heading in `build_plan.md`, create a plan file in `.teamide/plans/`
|
|
|
|
4. For each task line in `build_plan.md`, create a task file in `.teamide/tasks/` linked to its plan
|
|
|
|
**Research projects:** Use milestones from `docs/` instead of phases from `build_plan.md`. Each milestone becomes a plan, each task within it becomes a task file.
|
|
|
|
#### 3\. Customize the project
|
|
|
|
Each starter template has a **Customization Checklist** in its CLAUDE.md. Follow that checklist to update project name, identifiers, etc.
|
|
|
|
#### 4\. Customize CLAUDE.md
|
|
|
|
Edit the "Project-Specific Configuration" section at the bottom with:
|
|
|
|
- Project name
|
|
|
|
- Description
|
|
|
|
- Backend URLs (if applicable)
|
|
|
|
- Database schema (if applicable)
|
|
|
|
- TeamIDE workspace ID (if applicable)
|
|
|
|
#### 5\. Configure .gitignore for repo visibility
|
|
|
|
See "Project Dev Files" section below for private vs public repos.
|
|
|
|
#### 6\. Initialize git and create GitHub repo
|
|
|
|
```
|
|
git init
|
|
git add -A
|
|
git commit -m "Initial project setup"
|
|
gh repo create dcherrera/[ProjectName] --private --source=. --push --description "Brief description"
|
|
```
|
|
|
|
**Note**: All repos are created under `dcherrera` and are **private** by default.
|
|
|
|
### Phase 3: Development (outside Ideation)
|
|
|
|
#### 1\. Clone to development folder
|
|
|
|
```
|
|
cd ~/Software # or wherever you do development
|
|
git clone https://github.com/dcherrera/[ProjectName].git
|
|
cd [ProjectName]
|
|
```
|
|
|
|
#### 2\. Install dependencies and start building
|
|
|
|
Follow the starter template's README or CLAUDE.md for build instructions.
|
|
|
|
**From this point on, all development happens in the cloned repo, not in Ideation.**
|
|
|
|
#### 3\. Clean up Ideation
|
|
|
|
After cloning, remove the scaffolded project from Ideation:
|
|
|
|
```
|
|
rm -rf /Users/davidherrera/Obsidian/Ideation/[ProjectName]
|
|
```
|
|
|
|
Ideation's job is done - the project now lives in its own repo.
|
|
|
|
## Workflow: Creating a Project Without a Starter Template
|
|
|
|
Use this when no starter template exists for your project type. You'll copy individual template files instead.
|
|
|
|
### Phase 1: Planning (in Ideation)
|
|
|
|
Same as above - discuss, create spec, create plan.
|
|
|
|
### Phase 2: Scaffolding (in Ideation)
|
|
|
|
#### 1\. Create the project folder
|
|
|
|
```
|
|
mkdir /Users/davidherrera/Obsidian/Ideation/[ProjectName]
|
|
cd /Users/davidherrera/Obsidian/Ideation/[ProjectName]
|
|
```
|
|
|
|
#### 2\. Copy base templates
|
|
|
|
```
|
|
cp ../templates/claude.md ./CLAUDE.md
|
|
cp ../templates/coding-best-practices.md ./coding-best-practices.md
|
|
cp ../templates/README.md ./README.md
|
|
cp ../templates/LICENSE ./LICENSE
|
|
cp ../templates/.gitignore ./.gitignore
|
|
cp -r ../templates/docs ./docs
|
|
mkdir -p screenshots app InternalDocs
|
|
touch app/.gitkeep
|
|
```
|
|
|
|
#### 3\. Add spec and plan, customize, create repo
|
|
|
|
Same as starter template workflow steps 2-6 (including step 2.5 — generate TeamIDE PM files).
|
|
|
|
### Phase 3: Development (outside Ideation)
|
|
|
|
Same as starter template workflow - clone to dev folder, build there, clean up Ideation.
|
|
|
|
## Project Structure (Required)
|
|
|
|
Every project follows this structure for future modularity:
|
|
|
|
```
|
|
ProjectName/ # git root
|
|
├── README.md # Public-facing documentation (for GitHub + portfolio)
|
|
├── LICENSE # MIT Transparency License
|
|
├── CLAUDE.md # Project guidelines + config
|
|
├── coding-best-practices.md # Coding conventions (read before Phase 1)
|
|
├── build_spec.md # Full project specification
|
|
├── build_plan.md # Phased task checklist
|
|
├── .gitignore
|
|
├── docs/ # Public-facing documentation (parsed to HTML for website)
|
|
│ ├── README.md # Docs index with table of contents
|
|
│ ├── getting-started.md
|
|
│ ├── architecture.md
|
|
│ ├── development.md
|
|
│ ├── deployment.md
|
|
│ └── feature-*.md # Feature documentation (added per phase)
|
|
├── InternalDocs/ # Internal development documentation (not public)
|
|
│ └── ... # Design decisions, technical debt, internal API docs
|
|
├── screenshots/ # Project screenshots
|
|
│ ├── hero.png # Main screenshot (used in portfolio card)
|
|
│ ├── demo.gif # Animated demo (optional)
|
|
│ └── feature-*.png # Feature-specific screenshots
|
|
└── app/ # ALL project code lives here
|
|
├── src/
|
|
├── src-tauri/ # For Tauri apps
|
|
├── nhost/ # For Nhost backend
|
|
├── docker-compose.yml
|
|
└── ...
|
|
```
|
|
|
|
**Why this structure?** The goal is modularity - eventually enabling drag-and-drop of components between projects. The `app/` subfolder keeps code separate from planning docs. `docs/` is public-facing (parsed to HTML for the website). `InternalDocs/` is for internal development context only.
|
|
|
|
### Research Project Variant
|
|
|
|
Research projects (using ResearchStarter) follow a different structure:
|
|
|
|
```
|
|
ProjectName/ # git root
|
|
├── README.md # Project overview
|
|
├── LICENSE # MIT Transparency License
|
|
├── CLAUDE.md # Project guidelines + config
|
|
├── coding-best-practices.md # Coding conventions (read before Phase 1)
|
|
├── goals.md # Success criteria (replaces build_spec.md)
|
|
├── spec.md # Technical specification (optional)
|
|
├── conclusions.md # Living findings document
|
|
├── open_questions.md # Unresolved questions tracker
|
|
├── .gitignore
|
|
├── experiments/ # Experiment code (numbered runs)
|
|
├── results/ # Experiment results documentation
|
|
├── data/ # Datasets (gitignored)
|
|
├── literature/ # Paper notes & prior art
|
|
├── src/ # Implementation code (when research produces software)
|
|
├── tests/ # Test suite
|
|
├── docs/ # Public-facing documentation (parsed to HTML for website)
|
|
│ ├── README.md
|
|
│ ├── getting-started.md
|
|
│ └── architecture.md
|
|
├── InternalDocs/ # Internal development documentation (not public)
|
|
│ └── ...
|
|
└── screenshots/ # Visuals for README / portfolio
|
|
```
|
|
|
|
**Key differences from app projects:** `experiments/` + `src/` replace `app/`, `goals.md` replaces `build_spec.md`, milestone-based planning replaces `build_plan.md`, and `results/`/`literature/`/`conclusions.md`/`open_questions.md` support the research workflow.
|
|
|
|
## Standard Tech Stack (Default)
|
|
|
|
**Tauri Desktop Apps (use TauriStarter):**
|
|
|
|
- **Frontend**: Quasar Framework (Vue 3) + Vite
|
|
|
|
- **Desktop**: Tauri (Rust) - Cross-platform builds (macOS, Windows, Linux)
|
|
|
|
- **State**: Pinia
|
|
|
|
- **Backend** (optional): Nhost (self-hosted or cloud)
|
|
|
|
**Web Apps:**
|
|
|
|
- **Frontend**: Quasar Framework (Vue 3) - SPA mode
|
|
|
|
- **Backend**: Nhost (self-hosted via Docker)
|
|
|
|
- PostgreSQL, Hasura GraphQL, Auth, Storage, Functions
|
|
|
|
- **Containerization**: Docker / Docker Compose
|
|
|
|
**Native Apps (when needed):**
|
|
|
|
- **macOS/iOS**: Swift, SwiftUI, AppKit/UIKit
|
|
|
|
- **Cross-platform**: Evaluate per project
|
|
|
|
## Starter Template: TauriStarter
|
|
|
|
For cross-platform desktop apps (macOS, Windows, Linux).
|
|
|
|
The TauriStarter template includes:
|
|
|
|
- **Working Tauri + Quasar + Vite setup** - Ready to build immediately
|
|
|
|
- **Console logging** - Frontend `console.log()` captured to log files
|
|
|
|
- **Build script** - `./build.sh -dev -open` for consistent builds
|
|
|
|
- **Placeholder icons** - All platform icons included (replace with your own)
|
|
|
|
- **Full CLAUDE.md** - Complete project guidelines including:
|
|
|
|
- Build script documentation
|
|
|
|
- Testing changes reminders
|
|
|
|
- Database/Nhost rules (if using backend)
|
|
|
|
- Commit rules
|
|
|
|
- Customization checklist
|
|
|
|
### Build Script (build.sh)
|
|
|
|
All Tauri projects use the standardized `build.sh` script:
|
|
|
|
```
|
|
cd app
|
|
./build.sh -dev -open # Build dev and open app
|
|
./build.sh -prod # Build prod and install to ~/Applications
|
|
./build.sh logs # View latest console log (last 100 lines)
|
|
./build.sh clean # Clean build artifacts (preserves logs)
|
|
./build.sh clean-logs # Remove all logs
|
|
```
|
|
|
|
**Key features:**
|
|
|
|
- **Build-and-run** - No hot reload, but dev = prod (what you test = what ships)
|
|
|
|
- **Separate dev/prod** - Different bundle IDs, can run simultaneously
|
|
|
|
- **Automatic logging** - All build and console output saved to `build/logs/` and `build/console/`
|
|
|
|
- **Non-blocking** - Script exits after launching app
|
|
|
|
### Console Logging
|
|
|
|
Frontend `console.log()` is automatically captured:
|
|
|
|
```
|
|
console.log() → console-logger.ts → invoke('log_to_stdout') → Rust println!() → stdout → build.sh logs
|
|
```
|
|
|
|
**When debugging issues:**
|
|
|
|
1. Run `./build.sh logs` to see last 100 lines of console output
|
|
|
|
2. Full logs: `cat build/console/console_latest.log`
|
|
|
|
3. Build errors: `cat build/logs/build_latest.log`
|
|
|
|
## Starter Template: ResearchStarter
|
|
|
|
For research, experiments, and R&D investigations.
|
|
|
|
The ResearchStarter template includes:
|
|
|
|
- **Full R&D methodology** - Hypothesis-first workflow, kill gates, experiment tracking
|
|
|
|
- **Structured experiment tracking** - Numbered runs, results docs, literature reviews
|
|
|
|
- **Research planning files** - `goals.md`, `spec.md`, `conclusions.md`, `open_questions.md`
|
|
|
|
- **Templates for everything** - Experiment plans, results docs, paper reviews, milestones
|
|
|
|
- **Full CLAUDE.md** - Complete research methodology including:
|
|
|
|
- Research pipeline and document layers
|
|
|
|
- 11 key principles (hypothesis-first, kill gates, constraint-driven design, etc.)
|
|
|
|
- Experiment naming conventions and results documentation rules
|
|
|
|
- Milestone format with dependency graphs
|
|
|
|
- Customization checklist
|
|
|
|
### Key Differences from App Templates
|
|
|
|
| Aspect | App Templates (TauriStarter) | ResearchStarter |
|
|
| ------------- | ----------------------------- | -------------------------------------------------- |
|
|
| Planning | build_spec.md + build_plan.md | goals.md + milestone plans |
|
|
| Code location | app/ | experiments/ + src/ |
|
|
| Feature docs | docs/feature-*.md | results/experiment_N_results.md |
|
|
| Doc templates | TEMPLATE-feature.md | TEMPLATE-experiment-plan.md, TEMPLATE-milestone.md |
|
|
| Extra files | — | conclusions.md, open_questions.md, literature/ |
|
|
| Methodology | Build-and-ship | Hypothesis → experiment → analyze → conclude |
|
|
|
|
## build_spec.md Format
|
|
|
|
> **Research projects:** Use `goals.md` instead. It covers success criteria, anti-goals, kill gates, and fallback plans. See the ResearchStarter template.
|
|
|
|
The spec should cover everything about the app:
|
|
|
|
- Problem it solves
|
|
|
|
- Target users
|
|
|
|
- All features and functionality
|
|
|
|
- User flows
|
|
|
|
- Data model / entities
|
|
|
|
- Integrations
|
|
|
|
- UI/UX requirements
|
|
|
|
- Any constraints or requirements
|
|
|
|
## build_plan.md Format
|
|
|
|
> **Research projects:** Use milestone-based planning instead. See `docs/TEMPLATE-milestone.md` in the ResearchStarter template for the format, including dependency graphs and kill gates.
|
|
|
|
Phased task list with checkboxes. **Each phase ends with documentation and a plan update.**
|
|
|
|
**Every phase MUST end with these three steps:**
|
|
|
|
1. **Document** — Update both `docs/` (public) and `InternalDocs/` (internal) as appropriate
|
|
|
|
2. **Update build plan** — Check off completed tasks in `build_plan.md`, note any scope changes, deferred items, or new tasks discovered during the phase
|
|
|
|
3. **Update PM tasks** — Mark completed `.teamide/tasks/` files as `status: done`. When all tasks in a plan are done, update the plan's status. If new tasks were discovered, create new task files and add them to the plan.
|
|
|
|
```
|
|
# Build Plan: [Project Name]
|
|
|
|
## Phase 1: Foundation
|
|
- ☐ **Read `coding-best-practices.md`** before writing any code
|
|
- ☐ Initialize project from TauriStarter
|
|
- ☐ Customize app name and icons
|
|
- ☐ Set up backend (if needed)
|
|
- ☐ ...
|
|
- ☐ **Document**: Update `docs/getting-started.md` and `docs/architecture.md`. Add initial design decisions to `InternalDocs/`
|
|
- ☐ **Update plan & tasks**: Check off completed tasks in this file. Update `.teamide/tasks/` statuses to `done`. Note any changes or deferred items.
|
|
|
|
## Phase 2: Core Features
|
|
- ☐ Task 1
|
|
- ☐ Task 2
|
|
- ☐ ...
|
|
- ☐ **Document**: Create `docs/feature-[name].md`, update docs index. Add internal API docs or design decisions to `InternalDocs/`
|
|
- ☐ **Update plan & tasks**: Check off completed tasks in this file. Update `.teamide/tasks/` statuses to `done`. Note any changes or deferred items.
|
|
|
|
## Phase 3: [Feature Name]
|
|
- ☐ Task 1
|
|
- ☐ Task 2
|
|
- ☐ ...
|
|
- ☐ **Document**: Create `docs/feature-[name].md`, update docs index. Add internal API docs or design decisions to `InternalDocs/`
|
|
- ☐ **Update plan & tasks**: Check off completed tasks in this file. Update `.teamide/tasks/` statuses to `done`. Note any changes or deferred items.
|
|
|
|
## Phase N: Polish & Release
|
|
- ☐ Final testing
|
|
- ☐ ...
|
|
- ☐ **Document**: Review and finalize all `docs/`. Review `InternalDocs/` for accuracy, update `docs/deployment.md`
|
|
- ☐ **Update plan & tasks**: Final review — all tasks checked off and marked `done`, deferred items documented, plan status updated to `complete`
|
|
```
|
|
|
|
## TeamIDE PM Files
|
|
|
|
When scaffolding a project, generate `.teamide/` files from `build_plan.md` so the project has a ready-made task board when cloned.
|
|
|
|
### Directory Structure
|
|
|
|
Every phase lives inside a **plan group folder** under `plans/`. The group folder represents the larger plan (e.g. "initial build", "v2 refactor") that owns those phases. TeamIDE's Plans tab renders one card per group; clicking the card drills into the phase list.
|
|
|
|
```
|
|
ProjectName/.teamide/
|
|
├── project.yml # Project config (from template)
|
|
├── plans/
|
|
│ └── <plan-group-slug>/ # One folder per larger plan
|
|
│ ├── phase-1-slug.md # One per build_plan.md phase
|
|
│ └── phase-2-slug.md
|
|
└── tasks/
|
|
├── task-slug-a.md # One per checkbox line (flat — tasks are not nested)
|
|
└── task-slug-b.md
|
|
```
|
|
|
|
For a single-plan project, use a single group folder named after the project's primary plan (default: `build`):
|
|
|
|
```
|
|
.teamide/plans/build/
|
|
├── phase-1-foundation.md
|
|
├── phase-2-core-features.md
|
|
└── phase-3-polish.md
|
|
```
|
|
|
|
For a multi-plan project, use a `# Plan:` H1 divider in `build_plan.md` (see Multi-Plan Projects below) and create one folder per `# Plan:` heading.
|
|
|
|
### Conversion Rules
|
|
|
|
**Mapping:**
|
|
|
|
| build_plan.md | .teamide/ |
|
|
| ---------------------------------- | ----------------------------------------------- |
|
|
| `# Plan: <name>` H1 heading | plans/<plan-slug>/ (folder) |
|
|
| `## Phase N: <name>` heading | plans/<plan-slug>/phase-N-slug.md |
|
|
| `- [ ]` task line | tasks/task-slug.md |
|
|
| First phase in any group | Plan status: active |
|
|
| Subsequent phases | Plan status: draft |
|
|
| Phase number (N) | Plan order: N |
|
|
| Task position within phase | Task order: 1, 2, 3... |
|
|
| All tasks | Task status: backlog |
|
|
| Sub-bullets / context under a task | Task markdown body |
|
|
|
|
**Slugification:** Lowercase, spaces to hyphens, strip special characters, `.md` extension. Example: `## Phase 3: iCloud Sync` → `phase-3-icloud-sync.md`, `- [ ] Create CameraManager class` → `create-cameramanager-class.md`. Plan group slugs follow the same rule: `# Plan: Initial Build` → `initial-build/`.
|
|
|
|
**Default group slug:** if `build_plan.md` has no `# Plan:` headings, generate everything under `plans/build/`.
|
|
|
|
### Multi-Plan Projects
|
|
|
|
When a project has more than one larger plan (e.g. the initial build *and* a follow-on refactor), use `# Plan:` H1 dividers in `build_plan.md`. Each `# Plan:` opens a new group folder; every `## Phase` below it lands inside that folder.
|
|
|
|
```
|
|
# Plan: Initial Build
|
|
## Phase 1: Foundation
|
|
- [ ] Set up Tauri project
|
|
## Phase 2: Core CRUD
|
|
- [ ] Build user model
|
|
|
|
# Plan: v2 Refactor
|
|
## Phase 1: Schema Migration
|
|
- [ ] Add new user_roles table
|
|
```
|
|
|
|
Generates:
|
|
|
|
```
|
|
.teamide/plans/
|
|
├── initial-build/
|
|
│ ├── phase-1-foundation.md
|
|
│ └── phase-2-core-crud.md
|
|
└── v2-refactor/
|
|
└── phase-1-schema-migration.md
|
|
```
|
|
|
|
Phase numbering restarts within each group. Task back-references (`plan:` frontmatter) still use the phase file's basename — keep phase filenames globally unique across groups for now (e.g. `phase-1-foundation.md` vs `phase-1-schema-migration.md`).
|
|
|
|
### Plan File Format
|
|
|
|
`.teamide/plans/phase-N-slug.md`:
|
|
|
|
```
|
|
---
|
|
title: "Phase N: Phase Name"
|
|
status: active
|
|
order: 1
|
|
tasks:
|
|
- task-slug-a.md
|
|
- task-slug-b.md
|
|
---
|
|
Phase description (optional — copy any paragraph text below the phase heading in build_plan.md).
|
|
```
|
|
|
|
- Phase 1 gets `status: active`, all others get `status: draft`
|
|
|
|
- `order:` matches the phase number (1, 2, 3...) for correct display ordering
|
|
|
|
- `tasks:` lists all task filenames belonging to this phase
|
|
|
|
### Task File Format
|
|
|
|
`.teamide/tasks/task-slug.md`:
|
|
|
|
```
|
|
---
|
|
title: Task description from the checkbox line
|
|
status: backlog
|
|
plan: phase-N-slug.md
|
|
order: 1
|
|
---
|
|
Context and details about this task go here.
|
|
|
|
- Implementation note or sub-step
|
|
- Another detail or consideration
|
|
- Any relevant technical context
|
|
```
|
|
|
|
- `title:` is the text after `- [ ]` in build_plan.md
|
|
|
|
- `plan:` back-references the parent plan filename (bidirectional link)
|
|
|
|
- `order:` sequential number (1-based) controlling display order within the plan
|
|
|
|
- All tasks start as `status: backlog`
|
|
|
|
- **The body MUST contain context** — any sub-bullets, notes, or detail text beneath the task line in `build_plan.md` belongs in the task body. If the plan has context like implementation notes, API details, or technical considerations under a task, that content goes in the markdown body of the task file. Empty task bodies are not acceptable.
|
|
|
|
### System-managed timestamps
|
|
|
|
TeamIDE's backend auto-manages four timestamp fields on every PM file. **Scaffolding flows MUST NOT set these** — the backend stamps them on every write. Documented here so you understand the data shape and don't accidentally include them in generated files.
|
|
|
|
| Field | Format | When set |
|
|
|---|---|---|
|
|
| `created_at` | ISO 8601 UTC (`2026-05-15T14:30:00.000Z`) | Once, at file creation. Never updated. |
|
|
| `updated_at` | ISO 8601 UTC | Every write (PUT or PATCH). |
|
|
| `status_changed_at` | ISO 8601 UTC | Any write that changes `status`. |
|
|
| `finished_at` | ISO 8601 UTC, or absent | Set when `status` transitions to `done`. Cleared when transitioning back off `done`. Reflects current state, not history. |
|
|
|
|
Scaffolded task files should leave all four absent. The first PATCH or PUT through TeamIDE adds them. For brand-new task files written directly to disk (e.g. an agent creating tasks during a run), TeamIDE will fill `created_at`, `updated_at`, and `status_changed_at` on next read/edit.
|
|
|
|
### User-editable date fields
|
|
|
|
Tasks may carry two user-editable date fields, both stored as ISO 8601 UTC:
|
|
|
|
| Field | Meaning |
|
|
|---|---|
|
|
| `start_date` | When work on the task is scheduled to begin. Optional. Used by the timeline view to position the start of a task's range. |
|
|
| `due_date` | When the task is due. Optional. Used by table / kanban / timeline / calendar for scheduling and urgency colors. Replaces the legacy `due:` field. Both `start_date` and `due_date` are optional — tasks without dates show in "Unscheduled" lanes on the timeline. |
|
|
|
|
Format examples:
|
|
|
|
```yaml
|
|
start_date: 2026-05-15T00:00:00.000Z # date only, no specific time
|
|
due_date: 2026-05-20T14:30:00.000Z # specific time
|
|
```
|
|
|
|
When the time component is midnight UTC, TeamIDE renders the chip as date-only ("05/15/2026"). When the time is set, the chip shows date and time ("05/15/2026 2:30 PM"). Storage is always full ISO; display is US format.
|
|
|
|
**Legacy compatibility**: files using the old `due:` field continue to render correctly. On next save through TeamIDE the field is renamed to `due_date`. No migration script needed.
|
|
|
|
### Soft-deleted files (`deleted_at`)
|
|
|
|
TeamIDE's PM views (kanban, table, timeline, calendar, activity feed) recognize an optional `deleted_at` frontmatter field on any plan/task/note file. When set to an ISO timestamp, the file is treated as "trashed" — it stays on disk and in git history but is filtered out of every PM view.
|
|
|
|
- **Scaffolding** — do NOT include `deleted_at` when generating plan/task files from a build plan. New files start visible.
|
|
|
|
- **Soft-delete trigger** — only the user can soft-delete (via "Move to Trash" in the PM file editor, the upcoming bulk-delete in the table view, or any other PM surface). Agents and scaffolding flows should never write `deleted_at` themselves.
|
|
|
|
- **Recovery** — open the file in the Code module's file tree and either remove the entire `deleted_at: ...` line (recommended — cleanest) or blank the value (`deleted_at:` with nothing after it). The filter treats any falsy value as "not deleted" so both work. The file reappears in every view on next reload.
|
|
|
|
- **Hard delete** — the only path that physically removes a file is the Code module's file tree. PM surfaces always soft-delete.
|
|
|
|
Example trashed task:
|
|
|
|
```
|
|
---
|
|
title: Add caching to /pm/all-tasks
|
|
status: in-progress
|
|
plan: phase-3-caching.md
|
|
order: 2
|
|
deleted_at: 2026-05-13T22:14:08Z
|
|
---
|
|
Task body still here.
|
|
```
|
|
|
|
### project.yml Setup
|
|
|
|
1. Copy `templates/teamide/project.yml` to `[ProjectName]/.teamide/project.yml`
|
|
|
|
2. Replace `PROJECT_NAME` with the actual project name
|
|
|
|
### Example
|
|
|
|
Given this `build_plan.md`:
|
|
|
|
```
|
|
## Phase 1: Project Setup
|
|
- ☐ Create Xcode project
|
|
- Use SwiftUI App lifecycle
|
|
- Set deployment target to iOS 17+
|
|
- ☐ Configure bundle ID
|
|
- Format: com.dcherrera.appname
|
|
- ☐ Add dependencies
|
|
- AVFoundation, Photos framework
|
|
|
|
## Phase 2: Camera Engine
|
|
- ☐ Create CameraManager class
|
|
- Singleton managing AVCaptureSession
|
|
- Handle authorization flow
|
|
- ☐ Implement single-camera recording
|
|
```
|
|
|
|
Generate (no `# Plan:` headings → default `build` group):
|
|
|
|
```
|
|
.teamide/
|
|
├── project.yml
|
|
├── plans/
|
|
│ └── build/
|
|
│ ├── phase-1-project-setup.md # status: active, order: 1, tasks: [...]
|
|
│ └── phase-2-camera-engine.md # status: draft, order: 2, tasks: [...]
|
|
└── tasks/
|
|
├── create-xcode-project.md # status: backlog, order: 1, plan: phase-1-...
|
|
├── configure-bundle-id.md # status: backlog, order: 2, plan: phase-1-...
|
|
├── add-dependencies.md # status: backlog, order: 3, plan: phase-1-...
|
|
├── create-cameramanager-class.md # status: backlog, order: 1, plan: phase-2-...
|
|
└── implement-single-camera-recording.md # status: backlog, order: 2, plan: phase-2-...
|
|
```
|
|
|
|
**Task file with body context** — e.g. `create-xcode-project.md`:
|
|
|
|
```
|
|
---
|
|
title: Create Xcode project
|
|
status: backlog
|
|
plan: phase-1-project-setup.md
|
|
order: 1
|
|
---
|
|
- Use SwiftUI App lifecycle
|
|
- Set deployment target to iOS 17+
|
|
```
|
|
|
|
### Phase Closing Tasks
|
|
|
|
At the end of each phase:
|
|
|
|
1. **Create public feature docs** — For each significant feature, create `docs/feature-[name].md` using the template
|
|
|
|
2. **Update the docs index** — Add links to new docs in `docs/README.md` table of contents
|
|
|
|
3. **Update related public docs** — Keep `architecture.md`, `development.md` current as the project evolves
|
|
|
|
4. **Update internal docs** — Add design decisions, internal API docs, technical debt notes to `InternalDocs/`
|
|
|
|
5. **Update build plan** — Check off completed tasks in `build_plan.md`, note scope changes, deferred items, or new tasks discovered
|
|
|
|
6. **Update PM tasks** — Mark completed `.teamide/tasks/` files as `status: done`. When all tasks in a plan are done, update the plan's status to `complete`. Create new task files for any tasks discovered during the phase.
|
|
|
|
## Documentation Workflow
|
|
|
|
**Every phase ends with documentation.** This ensures features are documented while fresh and the docs stay current.
|
|
|
|
### docs/ vs InternalDocs/
|
|
|
|
| Directory | Audience | Purpose | Parsed for website? |
|
|
| ------------- | ---------- | ----------------------------------------------------------------------------------------------- | ------------------- |
|
|
| docs/ | Public | User-facing app documentation — getting started, features, architecture | Yes |
|
|
| InternalDocs/ | Developers | Internal dev context — design decisions, technical debt, internal API contracts, Claude context | No |
|
|
|
|
**`docs/`** contains ONLY what the public needs. It gets parsed into HTML and served on the app website. No internal implementation details, no dev-only context.
|
|
|
|
**`InternalDocs/`** contains everything internal — design rationale, known technical debt, internal API documentation, integration notes, debugging guides, anything that helps the development team but doesn't belong in public docs.
|
|
|
|
Both directories are committed to git.
|
|
|
|
### Documentation Structure
|
|
|
|
```
|
|
docs/ # Public-facing (parsed to HTML for website)
|
|
├── README.md # Index with table of contents (MAIN ENTRY POINT)
|
|
├── TEMPLATE-feature.md # Template for new feature docs (don't link this)
|
|
├── getting-started.md # Installation & setup
|
|
├── architecture.md # Tech stack & design decisions
|
|
├── development.md # Development workflow
|
|
├── deployment.md # Build & deployment
|
|
└── feature-*.md # Feature-specific documentation
|
|
|
|
InternalDocs/ # Internal development only (not public)
|
|
└── ... # Design decisions, tech debt, internal API docs
|
|
```
|
|
|
|
### After Each Phase
|
|
|
|
1. **Identify what to document** - New features, components, integrations
|
|
|
|
2. **Create feature docs** - Copy `TEMPLATE-feature.md` to `feature-[name].md`
|
|
|
|
3. **Update the index** - Add links to `docs/README.md` table of contents
|
|
|
|
4. **Update core docs** - Keep `architecture.md`, `development.md` current
|
|
|
|
5. **Update internal docs** - Add design decisions, technical debt notes, or internal API docs to `InternalDocs/` as needed
|
|
|
|
### Naming Convention
|
|
|
|
| Type | Pattern | Example |
|
|
| ---------------- | --------------------- | ------------------------- |
|
|
| Feature docs | feature-[name].md | feature-authentication.md |
|
|
| Component docs | component-[name].md | component-sidebar.md |
|
|
| Integration docs | integration-[name].md | integration-nhost.md |
|
|
| Guide docs | guide-[topic].md | guide-testing.md |
|
|
|
|
### Documentation vs README vs InternalDocs
|
|
|
|
| docs/ | README.md | InternalDocs/ |
|
|
| ----------------------------- | ------------------------------ | ----------------------------- |
|
|
| Public app documentation | High-level overview | Internal dev context |
|
|
| Parsed to HTML for website | GitHub / portfolio face | Never published |
|
|
| User-facing features & guides | Features list, getting started | Design decisions, tech debt |
|
|
| How to use the app | What the app is | How/why it was built this way |
|
|
|
|
- **`docs/`** = public documentation, parsed to HTML and served on the app website
|
|
|
|
- **`README.md`** = the public face of the project for GitHub and portfolio
|
|
|
|
- **`InternalDocs/`** = internal development context, committed but never published
|
|
|
|
## README Guidelines
|
|
|
|
Every project needs a README.md that serves two purposes:
|
|
|
|
1. **GitHub documentation** - For visitors and contributors
|
|
|
|
2. **Portfolio content** - Can be pulled into StaticPortfolioGenerator
|
|
|
|
### README Structure
|
|
|
|
Use the template from `templates/README.md`. Key sections:
|
|
|
|
| Section | Purpose |
|
|
| --------------- | ------------------------------------------------- |
|
|
| Title + Tagline | Project name and one-line description |
|
|
| Hero Screenshot | Main visual (hero.png) |
|
|
| Overview | 2-3 paragraphs explaining what/why |
|
|
| Features | Bulleted list of key features |
|
|
| Screenshots | Additional visuals with captions |
|
|
| Tech Stack | Technologies used |
|
|
| Getting Started | Prerequisites, installation, usage |
|
|
| Development | Dev setup instructions |
|
|
| Status | Active / Maintained / Paused / Archived / Concept |
|
|
| License | Link to LICENSE file |
|
|
|
|
### When to Update README
|
|
|
|
- **Project creation** - Initialize from template
|
|
|
|
- **New features** - Add to Features section
|
|
|
|
- **UI changes** - Update screenshots
|
|
|
|
- **Status changes** - Update Status section
|
|
|
|
- **Before making public** - Full review and polish
|
|
|
|
## Screenshots
|
|
|
|
Screenshots live in the `screenshots/` folder at the project root.
|
|
|
|
### Naming Convention
|
|
|
|
| Filename | Purpose |
|
|
| ------------------ | ----------------------------------------------------------- |
|
|
| hero.png | Main screenshot - used in portfolio cards and README header |
|
|
| demo.gif | Animated demo showing the app in action (optional) |
|
|
| feature-[name].png | Feature-specific screenshots (e.g., feature-dashboard.png) |
|
|
|
|
### Image URLs in README
|
|
|
|
Use raw GitHub URLs so images work everywhere:
|
|
|
|
```
|
|

|
|
```
|
|
|
|
### Screenshot Tips
|
|
|
|
- **Dimensions**: Aim for 16:9 or 16:10 aspect ratio
|
|
|
|
- **Resolution**: 1920x1080 or 1280x720 recommended
|
|
|
|
- **Format**: PNG for UI screenshots, GIF for animations
|
|
|
|
- **Content**: Show real/realistic data, not lorem ipsum
|
|
|
|
- **Dark mode**: Match the app's default theme
|
|
|
|
## Commit Rules (for all projects)
|
|
|
|
- Never mention Claude, AI, or generated code in commits
|
|
|
|
- Write as the developer, first person
|
|
|
|
- Concise and descriptive
|
|
|
|
## Project Dev Files
|
|
|
|
**App projects:** `CLAUDE.md`, `coding-best-practices.md`, `build_spec.md`, `build_plan.md` **Research projects:** `CLAUDE.md`, `coding-best-practices.md`, `goals.md`, `spec.md`, `conclusions.md`, `open_questions.md`
|
|
|
|
These files contain project planning and AI assistant context. How to handle them depends on repo visibility:
|
|
|
|
### Private Repos (Default)
|
|
|
|
**Commit these files to git.** Since the repo is private, there's no risk of exposing internal documentation.
|
|
|
|
```
|
|
# .gitignore - DO NOT ignore these files
|
|
# CLAUDE.md - tracked
|
|
# build_spec.md - tracked
|
|
# build_plan.md - tracked
|
|
```
|
|
|
|
### Open Source / Public Repos
|
|
|
|
**Add these files to .gitignore.** They contain internal development context that shouldn't be public.
|
|
|
|
```
|
|
# .gitignore - ADD these lines (app projects)
|
|
CLAUDE.md
|
|
coding-best-practices.md
|
|
build_spec.md
|
|
build_plan.md
|
|
|
|
# .gitignore - ADD these lines (research projects)
|
|
CLAUDE.md
|
|
coding-best-practices.md
|
|
goals.md
|
|
spec.md
|
|
conclusions.md
|
|
open_questions.md
|
|
```
|
|
|
|
**Before making a private repo public:**
|
|
|
|
1. Add the files to `.gitignore`
|
|
|
|
2. Remove them from git tracking: `git rm --cached CLAUDE.md coding-best-practices.md build_spec.md build_plan.md` (or the research equivalents)
|
|
|
|
3. Keep the local copies (they're now untracked)
|
|
|
|
4. Commit the `.gitignore` change
|
|
|
|
5. Then change repo visibility
|
|
|
|
### Summary
|
|
|
|
**App projects:**
|
|
|
|
| Repo Type | CLAUDE.md | coding-best-practices.md | build_spec.md | build_plan.md |
|
|
| ---------- | ---------- | ------------------------ | ------------- | ------------- |
|
|
| Private | Commit | Commit | Commit | Commit |
|
|
| Public/OSS | .gitignore | .gitignore | .gitignore | .gitignore |
|
|
|
|
**Research projects:**
|
|
|
|
| Repo Type | CLAUDE.md | coding-best-practices.md | goals.md | spec.md | conclusions.md | open_questions.md |
|
|
| ---------- | ---------- | ------------------------ | ---------- | ---------- | -------------- | ----------------- |
|
|
| Private | Commit | Commit | Commit | Commit | Commit | Commit |
|
|
| Public/OSS | .gitignore | .gitignore | .gitignore | .gitignore | .gitignore | .gitignore |
|
|
|
|
## Dockerized Frontend for Production
|
|
|
|
When deploying a fully dockerized web project (not Tauri), the frontend needs its own service in docker-compose:
|
|
|
|
### 1\. Create `app/Dockerfile.frontend`
|
|
|
|
```
|
|
# Build stage
|
|
FROM node:20-alpine AS build
|
|
WORKDIR /app
|
|
COPY package*.json ./
|
|
RUN npm install
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# Production stage
|
|
FROM nginx:alpine
|
|
COPY --from=build /app/dist /usr/share/nginx/html
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
EXPOSE 80
|
|
CMD ["nginx", "-g", "daemon off;"]
|
|
```
|
|
|
|
### 2\. Create `app/nginx.conf`
|
|
|
|
```
|
|
server {
|
|
listen 80;
|
|
server_name localhost;
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
|
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
|
|
expires 1y;
|
|
add_header Cache-Control "public, immutable";
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3\. Add frontend service to `docker-compose.yml`
|
|
|
|
```
|
|
frontend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.frontend
|
|
depends_on:
|
|
graphql:
|
|
condition: service_healthy
|
|
auth:
|
|
condition: service_healthy
|
|
labels:
|
|
traefik.enable: "true"
|
|
traefik.http.routers.frontend.rule: Host(`${FRONTEND_URL:-app.localhost}`)
|
|
traefik.http.routers.frontend.entrypoints: web
|
|
traefik.http.services.frontend.loadbalancer.server.port: "80"
|
|
restart: always
|
|
```
|
|
|
|
## TeamIDE Hosting
|
|
|
|
Projects are deployed via TeamIDE to teamide.dev.
|
|
|
|
- Use `teamide_deploy` to deploy changes
|
|
|
|
- Use `teamide_set_env_vars` to configure environment variables
|
|
|
|
- Use `teamide_get_logs` to check build status
|
|
|
|
To get workspace IDs, run: `bash teamide workspace list `
|
|
|
|
Each project should document its workspace ID in the project-specific CLAUDE.md.
|