Aptitude Map is an open-source living inventory of what you can do, what gives or drains energy, and which outcomes matter enough to require action. It is designed for personal reflection and for building a trustworthy human profile that can guide learning, delegation, outsourcing, and eventually a personal digital twin.
Use the hosted app at aptitude-map.exobyt.chatgpt.site. The site is public; each person's saved map is private to their ChatGPT sign-in.
Each capability belongs to an editable ontology and has a stable UUID. You can change the ontology without losing the identity of existing questions or responses. Every capability can be assessed on three independent dimensions:
- Ability (A):
0none to5distinctive; blank means untested. - Energy (E):
-2hate to2love; blank means untested. - Criticality (C): how important it is that the outcome exists in your life
or work over the next 12–24 months, regardless of who performs it.
0is irrelevant,1useful,2material, and3mission-critical.
Notes capture evidence, context, preferences, and learning edges. Native form controls preserve browser affordances: Tab moves through fields, number keys select ratings, and a field saves when focus leaves it.
The hosted app uses a stable, site-specific ChatGPT user ID. Profile reads, writes, ontology edits, imports, and exports are scoped to that ID on the server. A new user receives an independent copy of the starter ontology.
Personal profiles are data, not source code. This repository contains the app,
the generic starter ontology, the schema, and migrations. It intentionally
excludes local D1 state, exported profiles, backups, secrets, and runtime output
through .gitignore. Keep exported JSON out of source control;
it may contain your complete ratings and notes.
Each independently deployed copy receives its own Sites project, database, and site-specific user identities. Cloning this repository does not copy the hosted profiles from this example deployment.
Use Export JSON for a portable, schema-versioned backup. Import JSON validates and atomically restores the profile, including stable UUIDs, ratings, notes, ordering, and archive state.
Requirements: Node.js 22.13 or newer and npm.
npm ci
npm run devOpen http://localhost:3000. Hosted identity headers are not present during
ordinary local development, so the app shows its sign-in screen. Local D1 data
is stored under the ignored .wrangler/ directory.
OpenAI Sites is currently the supported deployment target. Every clone should create its own Sites project; never reuse somebody else's project ID.
-
Clone this repository and run
npm ci. -
Copy
.openai/hosting.example.jsonto.openai/hosting.json. -
Open the project in the ChatGPT desktop app and ask:
Deploy this project as a new OpenAI Site. Create a new Sites project and D1 database rather than linking an existing project. Keep it private until I approve broader access.
-
Review the build and database migration, then approve the deployment and desired audience.
Sites adds the new project's ID to the local .openai/hosting.json. That file
is gitignored because it belongs to one deployment, not to the reusable source.
The committed .openai/hosting.example.json contains only the portable D1 and
R2 binding declarations.
Sites saves a version before deploying it. You can ask ChatGPT to save without deploying when you want a reviewable candidate, or deploy an approved version to its production URL. See the OpenAI Sites documentation.
app/contains the Next-compatible UI and profile, import, and export routes.lib/owns the generic ontology, profile operations, and wire types.db/defines the canonical Drizzle schema and runtime bootstrap SQL.drizzle/contains versioned SQL migrations and migration metadata.worker/andbuild/adapt the app to a Cloudflare Worker deployment..openai/hosting.example.jsondeclares portable storage binding names.- The ignored
.openai/hosting.jsonlinks one local clone to its Sites project.
The persistent model has four concepts:
profiles— owner identity, schema version, and profile lifecycle.question_sets— editable ontology domains with stable UUIDs.questions— editable capability records with stable UUIDs and archive state.responses— one set of ratings and notes per capability.
The canonical schema is db/schema.ts. Keep
db/schema-sql.ts synchronized with generated migrations
when the data model changes.
npm test # lint and production build
npm run db:generate # generate a migration after a schema changeDeployments use OpenAI Sites. Run npm test before publishing. Schema changes
must include and verify their generated migration.