Status (2026-06-18): Design settled. See web-developer-template-plan.md for the implementation plan.
The five profile templates shipped in v1 cover:
| Template | Stack focus |
|---|---|
backend-developer |
Go, Python, TypeScript+Deno, SQL |
frontend-developer |
HTML, CSS, TypeScript/JavaScript, Deno bundling |
dataset-developer |
Front end + SQL, dataset CLI and datasetd |
data-scientist |
Data analysis, SQL, Python |
technical-writer |
Documentation, Markdown, Fountain |
A developer building web applications in the Laboratory workspace uses all of these stacks simultaneously:
net/http, database/sql)The closest match is backend-developer, but that
template emphasizes server architecture and does not mention the
front-end layers. The frontend-developer template covers
HTML/CSS/JS but omits Go and SQL. Neither gives Harvey the full picture
needed to assist across a full-stack session.
web-developer — concise, describes the role without
implying a specific framework or language. The display name is “Web
Developer”.
Shown during onboarding and template selection, not injected into context:
NOTE: Recommended model: qwen2.5-coder:7b or granite3.3:2b
RAG: ingest Go source, deno.json, package.json, SQL schema files
Style: prefer stdlib and web platform APIs; avoid heavy frameworks
INT. WORKSPACE PROFILE - WEB DEVELOPER
TITLE: Web Developer
NOTE: Recommended model: qwen2.5-coder:7b or granite3.3:2b
RAG: ingest Go source, deno.json/package.json, SQL schema files
Style: prefer stdlib and web platform APIs; avoid heavy frameworks
ROLE:
Full-stack web developer. Backend: Go (net/http, database/sql,
standard library first). Frontend: Deno + TypeScript (standard library,
no bundler by default), vanilla JavaScript (ES modules), CSS (custom
properties), HTML5 (semantic markup). Data: SQL — SQLite3 dialect for
embedded/application data, Postgres for shared services. Scripts and
automation: uv-managed Python.
PREFERENCES:
Go: minimal imports, stdlib over third-party, idiomatic error returns.
TypeScript/Deno: use Deno standard library (jsr:@std/*); no npm by
default. Type everything; avoid `any`.
JavaScript: ES modules, no class-based OOP unless the pattern fits.
CSS: custom properties for theming; no utility framework (Tailwind etc.)
unless the project already uses one.
HTML: semantic elements, ARIA attributes for interactive components.
SQL: write explicit column lists; avoid SELECT *; use transactions for
writes. SQLite3 dialect unless otherwise specified.
Python: managed via uv; prefer standard library; type hints on public
functions.
Tests: written alongside implementation. Go table-driven tests.
TypeScript: Deno's built-in test runner (Deno.test).
CONTEXT:
Edit this section to describe your current project, the tech stack
in use, and any constraints Harvey should keep in mind (e.g. "API
must stay compatible with v1", "SQLite3 only, no Postgres in this
project", "no external JS dependencies").
ROLE — gives the model a clear mental model of the developer’s scope. The explicit mention of each language with its primary library prevents the model from defaulting to Node.js, npm, or framework-heavy approaches.
PREFERENCES — per-language style rules. These are the most common points of friction when a general-purpose model assists a developer who has strong opinions about stdlib-first, no-framework, and idiomatic usage.
CONTEXT — left blank for user to fill in. The placeholder text suggests what to include without prescribing it. The comment examples cover the most common reasons a developer would need to override the defaults.
No code changes are required. ListTemplates() discovers
all .spmd files in templates/profiles/
automatically. Adding web-developer.spmd to that directory
is sufficient.
The onboarding picker will show a seventh option. The display order is alphabetical within the built-in set, so “Web Developer” will appear after “Technical Writer”.
web-developer-react.spmd or similar is useful for teams
with a fixed stack, but outside the scope of this workspace-general
template.