See more possible futures before choosing what comes next.
OpenAI Build Week · Education track
Steppi is a career-exploration experience for high-school and college students. It turns the interests, studies, projects, responsibilities, and uncertainties a student shares into a broad set of career roles they can understand and explore.
It does not score aptitude, rank a “best” career, or pretend to predict a student’s future. Steppi helps students build career literacy: see more possibilities, understand the work, and choose a small next step worth trying.
Students often know what they enjoy without knowing how those experiences map to real work. Traditional career tools can make that harder by starting with abstract personality tests, returning a handful of familiar categories, or producing long reports that feel more like verdicts than invitations to explore.
Steppi takes a breadth-before-depth approach. It first opens the student’s view of what is possible, then lets their curiosity decide where to go deeper.
- Talk naturally. A short conversational intake asks about interests, classes, projects, work, responsibilities, dislikes, strengths, and practical considerations.
- Confirm the reflection. GPT-5.6 turns that conversation into a validated structured context and a two-sentence reflection. The student can accept, inspect, or rewrite it before anything is suggested.
- Discover possibilities. Steppi generates 12–15 meaningfully varied, unranked career roles, targeting thirteen in the normal flow.
- Understand one role quickly. Every role explains what it is, why it may fit, why it may not fit, what the day-to-day feels like, and one low-risk way to try it.
- Ask what actually matters. The student can continue with a natural follow-up. Each role keeps its own conversation during the active visit.
- Research only when needed. Questions about current programs, costs, admissions, licensing, salary, or local opportunities trigger source-aware research. Unsupported current claims are not shown.
The intended result is not a career decision. It is a better question, a more interesting possibility, and one concrete next step.
GPT-5.6 is not a decorative chat layer in Steppi. It performs the parts of the experience that require judgment across messy, incomplete student context:
- synthesizing a conversation while keeping student statements, model inferences, constraints, tensions, and uncertainty distinct;
- generating a varied set of roles instead of near-duplicate job titles;
- connecting possible fit and possible mismatch to evidence from the student;
- maintaining a concise, role-specific conversation; and
- deciding how to synthesize current web evidence when a question depends on facts that can change.
Every model boundary uses the OpenAI Responses API with explicit Zod-backed
structured outputs before data reaches the interface. Path generation has a
bounded three-attempt application-level validation policy; incomplete role sets
never reach the student. Role follow-ups are stateless (store: false), and the
application forces web search for deterministically recognized unstable topics.
Codex was the primary engineering collaborator throughout the entire Build Week build—not just a tool used to generate a single screen or code snippet. Pope Cruz set the product direction, constraints, and final decisions; Codex helped turn that direction into a working, tested product across the full development loop:
- Planning and product definition: translated the initial concept into the product vision, implementation specification, milestone handoff, acceptance criteria, and a continuously maintained build log.
- End-to-end implementation: built and iterated on the Next.js interface, conversational intake, profile confirmation, floating role space, selected-role brief, role-specific conversation, server routes, and conditional research flow.
- AI integration and safety: developed the GPT-5.6 prompts, Zod schemas, deterministic validators, bounded retry behavior, source checks, and honest failure states that keep unsupported or malformed output away from students.
- Design iteration: refined the responsive visual system, interaction states, keyboard behavior, reduced-motion treatment, mobile layouts, and student-facing copy against Steppi's warm, calm, exploratory design direction.
- Testing and browser QA: created unit and route tests plus deterministic fixtures, ran linting, strict type checks, tests, and production builds, and exercised the experience in a real browser across desktop, mobile, loading, empty, error, retry, and malformed-output states.
- Debugging and delivery: inspected logs and diffs, diagnosed model latency and validation failures, tightened the implementation, audited secret exposure, and maintained the README, deployment guidance, and verification evidence.
This human-directed, Codex-executed workflow made the repository itself part of
the collaboration: product intent lives in docs/VISION.md, the current contract
in docs/SPEC.md, operational context in docs/TASKS.md, and the detailed record
of implementation decisions and checks in docs/BUILD_LOG.md.
- Possibilities, not predictions. Roles are unranked and framed as options worth exploring, never as a diagnosis or guaranteed fit.
- Student control. The student sees and can edit Steppi’s reflection before role generation.
- Honest tradeoffs. Every role includes reasons it may fit and reasons it may not, without turning either into a verdict.
- Progressive depth. The initial role brief stays readable in under a minute; deeper detail appears through conversation.
- Evidence when it matters. Current external claims require retrieved HTTPS sources. Provenance is available without overwhelming the main answer.
- Safe failure. Missing, malformed, or unsupported model output produces a calm retry or unavailable state rather than fabricated content.
flowchart LR
A["Conversational intake"] --> B["Validated student context"]
B --> C["Student confirms or edits reflection"]
C --> D["12–15 validated career roles"]
D --> E["Selected-role brief"]
E --> F["Role-specific conversation"]
F --> G{"Current facts needed?"}
G -->|No| H["Context-grounded answer"]
G -->|Yes| I["Web search + source validation"]
J["GPT-5.6 via server routes"] -.-> B
J -.-> D
J -.-> F
K["Zod schemas + deterministic checks"] -.-> B
K -.-> D
K -.-> F
All OpenAI calls run in Next.js server routes. API keys, raw provider errors, and environment values are never sent to the browser. Active product state is in memory and clears on refresh; authentication and long-term persistence are intentionally outside the Build Week scope.
- Next.js 16 App Router and React 19
- TypeScript in strict mode
- Tailwind CSS 4
- OpenAI JavaScript SDK and Responses API
- Zod structured-output and runtime validation
- Vitest
- Vercel deployment target
Requirements: Node.js 20.9 or newer and npm.
npm install
cp .env.example .env.localAdd server-only OpenAI credentials to .env.local:
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-5.6-luna
Then start the app:
npm run devOpen http://localhost:3000. Never expose the API key
through a NEXT_PUBLIC_ variable or commit .env.local.
From the landing page, select Start exploring, then:
- complete the short intake;
- confirm or edit Steppi’s two-sentence reflection;
- select Explore career roles;
- choose any role in the possibility space;
- read its fit, tension, day-to-day, and low-risk experiment; and
- ask one interpretive question and one question that needs current sources.
Examples: “How creative is this work?” and “Are there affordable programs near me?” The second question demonstrates conditional research and progressively disclosed source details.
Development fixtures can verify conversation states without paid model calls:
/intake?fixture=conversation-success
/intake?fixture=conversation-researched
/intake?fixture=conversation-unavailable
/intake?fixture=conversation-api-failure
/intake?fixture=conversation-malformed
npm run lint
npm run typecheck
npm run test
npm run buildThe latest completed product verification passed lint, strict type checking, 210 tests across 27 files, a production build, desktop and mobile browser checks, keyboard interaction, reduced motion, and malformed-output and failure-state fixtures. See the build log for detailed evidence and the active handoff for current limitations.
The existing Vercel preview is anonymously reachable, but it serves an older Grade 11 / three-path build. It is not the submission demo until the current 12–15-role product has been redeployed and its anonymous golden path has been verified.
For Vercel, configure OPENAI_API_KEY and OPENAI_MODEL=gpt-5.6-luna as server-side
environment variables for the target environment, then redeploy. Existing
deployments do not inherit environment-variable changes automatically.
- Refreshing clears the intake, role set, and role conversations.
- There are no accounts, persistent profiles, admissions predictions, job placement features, or comprehensive career and college databases.
- Current-source conversation behavior has deterministic mocked coverage but has not received a fresh live GPT-5.6 quality pass after the latest changes.
Built by Pope Cruz for OpenAI Build Week.