Skip to content

Local professional identity engine

2026 · Open-source npm release

seco

Capture one career story once, then render it for every surface

I designed and built a local-first MCP system that turns guided, reviewed professional memories into reusable material for resumes, LinkedIn, GitHub, Obsidian, LaTeX, cover letters, bios, and job-specific applications.

seco launch page hero with its one intake, every surface positioning and npm install command
The source-rendered launch surface distilled the product to one promise and one install command.

Quick scan

TL;DR

The shortest version: what changed, what shipped, what was verified, and where the proof stops.

Overview

Problem

Professional evidence is repeatedly rewritten for resumes, profiles, portfolios, and applications, which makes the underlying story easy to fragment or lose.

Move

Made a reviewed, structured experience memory the durable source of truth, then treated every professional surface as a renderer over that record.

Outcome

Published an open-source local MCP package with guided intake, 13 tools, 10 render surfaces, job-description tailoring, Obsidian export, and an install-artifact release gate.

Scope

Independent product, interaction, systems, and full-stack engineering across the core library, MCP transport, local browser UI, packaging, and launch site.

Proof

Product surface
13 MCP toolsCurrent definitions cover intake, review, memory CRUD, rendering, tailoring, and exports.
Render system
10 output typesOne structured memory can produce resume, LinkedIn, GitHub, Obsidian, LaTeX, cover-letter, and bio formats.
Release checkpoint
100 testsThe June 2026 journal records a passing 1.0.1 release check and installed-tarball MCP smoke.
Build history
7 commitsThe inspected application history spans May 25 through June 21, 2026.

01 · Context

The product premise was a memory problem, not a writing prompt.

Resumes, LinkedIn profiles, GitHub READMEs, portfolios, and cover letters all ask for different versions of the same underlying evidence. seco began from the premise that asking a model to rewrite an unstructured history each time would keep the output flexible but leave the source material fragile.

The alternative was to capture the experience itself: situation, responsibility, action, result, skills, metrics, dates, and context. Once that evidence is reviewed and stored, each destination can become a constrained view over the same professional memory.

seco launch page showing its install command, intake sequence, architecture frame, and output surfaces
The original May 2026 launch page established the one-intake, many-surfaces thesis. This source-rendered capture predates the later native MCP intake card and Obsidian vault export.

02 · The decision

Keep one canonical record and make every interface a transport layer.

Capture in conversation. Review before save. Render from structured evidence.

All business logic lives in the core workspace: intake state, draft extraction, scoring, rendering, persistence, and exports. Claude Desktop, Claude Code, the MCP App card, and the localhost browser call that same service layer instead of reimplementing product behavior in each surface.

The product also separates draft inference from durable memory. After each answer, seco extracts a structured draft, reports confidence and missing fields, and asks the highest-value next question. In the preferred flow, the draft is not committed until the person reviews the structured fields and explicitly saves it.

Engineering noteLocal-first is a boundary, not a blanket offline claim.

SQLite and configuration live under the user’s local seco directory. External model and transcription calls happen only through user-supplied keys, and optional voice providers are not required for text intake.

  • The canonical database path is ~/.seco/seco.db with WAL mode and foreign keys enabled.
  • First-run setup writes provider keys to ~/.seco/.env with file mode 0600.
  • Anthropic handles extraction and rendering; Deepgram and OpenAI are optional voice paths, so local-first does not mean all processing stays offline.

03 · What shipped

A complete loop from raw experience to reusable career material.

Text intake stays inside MCP chat while a native intake card shows captured details, confidence, quality, and missing fields. Voice intake moves intentionally to the localhost browser, where microphone access starts only after an explicit action and can fall back from Deepgram streaming to OpenAI Whisper or typed responses.

Reviewed memories can be listed, updated, versioned, deleted, scored against a job description, and rendered across ten output types. The tailoring pipeline selects the strongest matching experiences, produces role-specific material, records skill-gap analysis, and stores the application snapshot alongside the source memories.

Obsidian is an optional workspace mirror rather than a replacement database. Exported notes use stable filenames, stay within the selected vault boundary, and refuse silent overwrite unless it is explicitly requested.

One local companion

seco localhost home screen offering text and voice intake
The real companion UI keeps intake initiation small and explicit; the primary text workflow remains available in MCP chat.
Engineering noteThe packaged artifact is tested as a product surface.

The release gate goes beyond testing the workspace: it packs the npm artifact, installs it in a temporary project, starts the installed MCP binary, and verifies the exposed tool list.

  • The current journal records 100 passing tests, a successful build, and a zero-vulnerability production audit for the pending 1.0.1 release state.
  • Dry-run packaging and installed-tarball MCP smoke passed after fixing a runtime dependency boundary missed by workspace tests.
  • MCPB staging completed, but final bundle packing remains unverified because the release environment did not have the external mcpb CLI.

04 · Evidence

The evidence is an installable system and the release constraints it exposed.

seco’s application repository records seven commits from May 25 through June 21, 2026, all authored by Aidan. The first engineering journal entry identifies seco-mcp@1.0.0 as already published; subsequent work added release automation, native MCP UI, persistent intake preferences, diagrams, Obsidian export, and prepared a 1.0.1 release state.

The checked-in suite contains 100 test definitions across the core, MCP server, and web UI. The latest journal records that all 100 passed as part of the 1.0.1 release check, along with the build, production dependency audit, dry-run package, and installed-tarball smoke.

No usage, conversion, retention, or hiring-outcome analytics were found. The case-study claims are therefore limited to source behavior, release history, recorded verification, package boundaries, and captures rendered from the actual checked-in interfaces.

05 · Reflection

A professional memory earns trust through review, portability, and proof.

The central architecture decision held: keeping product logic in one core package made it possible to add an MCP-native card, preserve a browser voice fallback, and extend outputs without forking the meaning of an experience across clients.

The release work also changed the definition of done. A green monorepo build did not prove that someone else could install the npm artifact. Testing the packed binary revealed a real dependency boundary and made distribution evidence part of the product, not only a maintenance concern.

The next gap is external validation. The repository demonstrates a coherent local workflow and defensible data boundaries, but future work should measure whether people complete intake, return to their saved memories, and trust the generated material enough to use it in real applications.

Continue with the project

Explore seco in context.