designer/engineer

Wicked good design for wicked problems.

Featured Work

PROJECT FELINES

PROJECT FELINES

The Alzheimer’s field spent billions clearing amyloid plaques from brains that kept declining. FELINES is what happened when I stopped accepting that narrative and started tracing upstream: iron dysregulation, ferroptosis, vascular failure, across six neurodegenerative diseases that enter through different doors but break down the same way.

GOINVO WEBSITE

GOINVO WEBSITE

Migrating a healthcare UX studio off aging Gatsby infrastructure onto Sanity CMS, animated page transitions, and accessibility-first architecture. Nine document types, card-morph transitions, and a content pipeline that lets non-technical editors publish without touching code.

WRITROSPECT

WRITROSPECT

An AI-assisted journaling tool that solves the blank-page problem. Built on neuroscience research about why people abandon commitments to themselves, with a prompt architecture that adapts to what you actually need rather than loading everything at once.

RENDOMAT

RENDOMAT

A programmatic video studio built at GoInvo. Turns structured content into multi-platform video with professional motion design, replacing a manual production pipeline that took a full day per video with an automated system that renders in minutes.

PHYLACTORY

PHYLACTORY

100,000+ concurrent units in a fantasy game that fuses factory management with real-time strategy. Built a custom Entity-Component-Space system from scratch in Godot 4 with C++ and GDExtension, hand-crafted every sprite and tileset in Aseprite, and designed twelve interconnected game systems such as energy grids, trains, pipes, and formation AI.

Case Study

The blank page
always wins.

AI-assisted journaling that treats reflection as a habit design problem, not a willpower problem. Built on neuroscience research about why people abandon commitments to themselves.

View Project

40+

Components

25+

Research Papers

Neomorphism

Design System

Solo Build

Timeline

01

The Problem

I kept failing at journaling. Not because I didn't want to reflect. I'd start a journal, write for a few days, and then hit a day where I felt like I had nothing to say. No big insights. No interesting events. Just a blank page and the vague sense that I should write something.

So I wouldn't write. And then the next day felt harder because I'd already broken the streak. Within a week or two, the journal was abandoned.

This pattern repeated for years. The problem wasn't discipline. The problem was that on low-insight days, journaling felt pointless, and pointlessness kills habits.

Existing tools fell into two camps:

Dumb storage

A text box. You write, it saves. No structure, no help noticing patterns.

Intrusive AI

The tool wants to write for you. It summarizes, suggests, rewrites. You're just the prompter.

Neither approach solved the blank-page problem. Neither helped me sustain the habit. The broader landscape wasn't much better:

The Problem

Most habit and goal-tracking apps rely on streaks, gamification, and social pressure — mechanisms that research shows can undermine intrinsic motivation. They treat accountability as punishment rather than self-understanding.

  • Streak anxiety leads to burnout
  • Public commitment can reduce commitment-making
  • External rewards crowd out internal motivation

The Vision

An app that acts like a thoughtful accountability partner, not a drill sergeant. One that uses AI to surface patterns, supports self-determination, and builds habits through understanding.

  • +Private by default, optional sharing
  • +Evidence-based habit formation (Lally et al.)
  • +AI that asks questions, not gives orders

Reflection isn't the hard part. Sustaining it is.

02

The Approach

Writrospect treats AI as a reflective companion, not an author. You write freely, even if it's short, even if it feels insignificant. The AI reads what you've written and notices patterns you might miss: recurring themes, commitments you've mentioned, connections to previous entries. It suggests additions to your journal based on your conversation with it.

But you decide what to keep. The AI never writes your entry for you.

This solves the blank-page problem in two ways. First, the AI gives you something to respond to, which is easier than generating from scratch. Second, it helps you see that even “boring” days contain threads worth following.

The navigation structure follows a deliberate progression: Journal → Commitments → Tasks → Strategies → Dashboard. This ordering reflects how reflection becomes action. You start with raw thought, surface what matters, break it into specific actions, develop approaches that work, and track progress over time.

03

Strategic Positioning

Most accountability apps lean punitive: streaks, shame, gamification. Writrospect occupies the underserved quadrant: AI-powered and genuinely supportive.

AI-Powered

AI + Punitive
Generic AI coaches
AI + Supportive
Writrospect
Manual + Punitive
HabiticaStreaks
Manual + Supportive
Day OneSimple journals

Manual

Why behavioral science is the moat

Any app can add AI chat. But grounding every feature decision in peer-reviewed research, and deliberately excluding popular but counterproductive patterns like streaks and leaderboards, creates a product philosophy that's hard to replicate by simply shipping features. The discipline of what we don't build is the real differentiator.

04

Research → Product Pipeline

Every product decision traces back to a specific finding in the behavioral science literature. Here's how peer-reviewed research became features.

Lally et al. (2010)

Habit formation takes an average of 66 days, with a range of 18–254 days depending on complexity.

Flexible formation tracking

No rigid 21-day or 30-day timelines. Progress adapts to the individual habit’s complexity and the user’s context.

Lally et al. (2010)

Missing a single day did not meaningfully derail the habit formation process.

No streak-shaming

A missed day is acknowledged without penalty. The UI avoids broken-streak visuals that induce guilt.

Ryan & Deci (2000)

Threats, deadlines, and imposed goals diminish intrinsic motivation and undermine self-regulation.

No punitive features

No fines, no public failure announcements, no countdown timers. Motivation comes from within, not from fear.

Gollwitzer (1999)

Implementation intentions (if-then plans) produce strong effects on goal attainment (d = .61–.77).

Strategies feature

Users create implementation intentions as “Strategies” — concrete if-then plans attached to their goals.

Munson et al. (2015)

Public accountability increases commitment-keeping but suppresses commitment-making.

Private by default

All data is private. Sharing is opt-in per item. This preserves the willingness to set ambitious goals.

The discipline of what we don't build is the real differentiator.

05

What We Deliberately Don’t Build

These are popular features in the accountability space. We excluded every one, not from oversight, but from evidence.

Streaks

Streak counters punish missed days and create anxiety around maintaining arbitrary chains. A single lapse becomes a catastrophic reset rather than a minor blip.

Lally et al. (2010): missing one day doesn’t reset habit formation. Ryan & Deci (2000): deadlines and threats diminish intrinsic motivation.

Leaderboards

Comparative rankings turn self-improvement into competition. Users optimize for rank rather than personal growth, and those at the bottom feel demotivated.

Ryan & Deci (2000): pressured evaluations and competitive contexts diminish intrinsic motivation and autonomous self-regulation.

Public Shaming

Making failures visible to others increases follow-through on existing commitments but discourages people from setting ambitious goals in the first place.

Munson et al. (2015): public accountability suppresses commitment-making. People set easier goals when they know failure is visible.

Gamification Points

Points, badges, and XP systems create extrinsic reward loops that crowd out the intrinsic satisfaction of genuine self-improvement.

Ryan & Deci (2000): external rewards and contingent reinforcements undermine internal motivation, especially for interesting tasks.

06

The Neuroscience of Follow-Through

When Writrospect detects that a user is setting a goal, making a commitment, or tracking a habit, the system doesn't just store it. It activates a set of design patterns rooted in how the brain actually processes identity and future planning.

Most productivity tools treat follow-through as a reminder problem. Set an alarm, get a notification, do the thing. But the failure isn't at the reminder stage. It's upstream, in how people relate to their own commitments.

Your future self is a stranger

The anterior cingulate cortex (ACC) activates strongly when you think about your present self, but weakly when you think about your future self. The activation pattern for “me in five years” looks more like “a stranger” than “me right now.” This isn’t a metaphor. It’s measurable neural activity.

Design implication

People don’t procrastinate because they’re lazy. They procrastinate because their brain literally doesn’t register future consequences as happening to them. The tracking system needs to collapse that distance.

ACC activation predicts behavior

The strength of ACC activation for your future self correlates with real-world outcomes: savings rates, exercise frequency, follow-through on commitments. People with stronger future-self continuity make better long-term decisions consistently.

Design implication

This isn’t about willpower or discipline. It’s about how vividly you can imagine yourself later. Design can intervene here by making the future self concrete and present.

Identity follows behavior, not the reverse

The “pencil-in-teeth” effect: holding a pencil between your teeth forces a smile shape, and subjects report feeling happier. Identity works the same way. You don’t need to feel like a disciplined person to act like one. Repeated behavior, reflected back, builds the identity.

Design implication

The system should reflect patterns back with evidence: “You’ve done this three times now. That’s what someone who cares about this does.” Let self-concept catch up to behavior.

Your brain treats “you tomorrow” like a stranger.

The anterior cingulate cortex fires strongly for present-self recognition, weakly for future-self. This measurable gap in neural activation explains why people neglect their own commitments. Design can close it.

07

Designing the Tracking System

These neuroscience findings translated directly into design principles for how Writrospect responds when it detects a goal, habit, or commitment in a journal entry. Each principle has a concrete “instead of this, do this” pattern baked into the AI's system prompt.

Earned identity reinforcement

Instead of

“Great job! You’re so disciplined!”

The system says

“You followed through on [X]. That’s the third time this week. That’s what someone who [identity] does.”

Every identity claim is anchored to evidence the user actually produced. No hollow affirmations.

Future-self bridging

Instead of

“Remember to do this later!”

The system says

“Imagine yourself tonight at 11pm. What do they need from you right now?”

Second person (“you at 11pm”) instead of third person (“future you”). Collapse the temporal distance.

Dependency chain surfacing

Instead of

“Set a reminder for 11pm bedtime”

The system says

“For an 11pm sleep goal, dinner needs to be done by 10. When do you need to start cooking?”

People see the goal but not the upstream prerequisites. The system backward-chains from the target.

Failure as data

Instead of

“You missed your goal. Try harder tomorrow!”

The system says

“What got in the way? One missed day doesn’t change who you are. You’re still the person who [past evidence].”

Capture the blocker as a learned dependency for future planning. Preserve accumulated identity evidence.

The system also maintains a running record of stated values, commitments made, follow-through events, recurring themes, identity aspirations, past blockers, and learned dependencies. This history is what makes identity reinforcement feel earned rather than manufactured.

Behavior, then reflection, then identity, then more behavior.

08

Design Decisions

Every visual choice maps back to the product's core value: calm, supportive self-reflection.

Visual Language

Neomorphism

Soft, tactile surfaces that feel calm and approachable. The raised/pressed states create physical affordances that guide interaction without harsh borders or flat minimalism.

Dual-shadow system (light + dark) for depth

Pressed state for active/selected elements

16px border radius for softness

Color Theory

Pink-Lavender Palette

Warm mauve tones chosen to reduce visual stress and create a journal-like intimacy. The muted palette avoids the clinical feel of blue-heavy productivity apps.

Background: #e8dde8 — warm, not sterile

Foreground: #5c4a5c — soft contrast, easy on eyes

Accent: #a890a8 — subtle call-to-action warmth

Typography

Comfortaa + Nunito

Rounded typefaces that reinforce the soft design language. Comfortaa for headings provides personality; Nunito for body text ensures readability at all sizes.

Comfortaa: geometric, rounded, modern headings

Nunito: humanist, friendly body text

Consistent weight scale: 400–700

09

User Flow

The AI chat layer sits across all features: users can get contextual help from anywhere in the app.

10

Feedback Loop

Unlike a linear user flow, the core experience is a continuous cycle. Journaling generates insights that refine habits, which feed back into richer journal entries.

11

The Prompt Architecture

A naive approach would send every journal entry to Sonnet with a massive system prompt covering every possible scenario: crisis support, habit tracking, identity reinforcement, relationship context, time-of-day awareness. But most entries don't need most of that context, and loading it all wastes tokens and dilutes the model's attention.

Instead, Writrospect uses a hybrid routing architecture. A base system prompt always loads with the core behavioral rules (anti-sycophancy, tool usage, the neuroscience-informed tracking principles). On top of that, a modular prompt system assembles additional context conditionally, using a pipeline that avoids unnecessary API calls for simple messages.

Step 1: Complexity Scoring

Score the message based on length and nuance indicators. Short messages like “hello” or one-liners score low and get minimal context. The threshold is roughly two lines of substance before the system invests in deeper classification.

Step 2: Pattern Matching

Scan for signal words (crisis language, identity language, goal setting, overload signals) and cross-reference user state (open habits, tracked relationships, interaction mode, time of day). If patterns match, load those modules directly. No API call needed.

Step 3: Haiku Fallback

If the complexity score is high but pattern matching didn't capture anything specific, the message goes to Haiku for nuanced classification. This catches entries that are substantive but don't contain obvious signal words, things like implicit emotional processing or indirect references to tracked commitments.

Final: Sonnet Response

Receives the base prompt + only the modules selected by the pipeline. ~50% fewer tokens on average compared to loading everything.

What the Router Detects

Crisis & distress

Self-harm language, acute emotional distress, panic signals

Modules loaded

Crisis support, de-escalation, safety resources

Identity & goals

“I want to be someone who...”, commitment language, habit tracking

Modules loaded

Identity reinforcement, future-self bridging, dependency chains

Quick check-in

Short entries, status updates, low-complexity messages

Modules loaded

Lightweight response, pattern recognition, streak tracking

Overload & overwhelm

“Too much going on”, scattered thoughts, decision fatigue

Modules loaded

Triage mode, simplification, priority surfacing

The router also reads user state, not just message content. If the user has open habits, the habit-tracking module loads automatically. If they track relationships, the relationship-context module loads. The user's preferred interaction mode (thinking partner, functional, balanced) and complexity preference shape which modules activate and how verbose they are.

This means two users sending the same message can get different prompt assemblies based on their history, preferences, and current context. The system adapts without the user having to configure anything.

The Override Table

The routing pipeline handles most cases automatically, but the user can always see and override what it selected. A checkbox table surfaces the active prompt modules, letting users check, uncheck, or modify individual items before the response generates.

The same table pattern reappears when the system detects a new task, commitment, or goal. Instead of the AI guessing at dependencies, it presents a checklist of likely upstream prerequisites (based on the dependency chain logic and learned blockers from past entries) and lets the user confirm which ones actually apply. The user stays in control of what the system tracks without having to build the list from scratch.

12

Key Features

Where design, engineering, and research come together.

AI Chat with Tool Use

The chat isn’t just a text box — it calls structured tools that propose habits, goals, tasks, and strategies. The AI returns typed suggestions rendered as interactive cards the user can approve, edit, or dismiss.

  • Streaming responses via Anthropic SDK
  • Tool definitions for propose_items, suggest_dependencies, journal prompts
  • Typed suggestion system with QuickSuggestions component
  • Hidden context messages for seamless AI awareness

Evidence-Based Habit Tracking

Built on Lally et al.’s finding that habit formation averages 66 days. No streak-shaming — missing one day doesn’t reset progress. The app tracks automaticity, not perfection.

  • 66-day formation model (not arbitrary streaks)
  • Self-Determination Theory: autonomy, competence, relatedness
  • Implementation intentions: if-then planning for each habit
  • 25+ cited research papers in source bibliography

Neomorphism Design System

A complete component library with Card, Button, Input, Select, Modal, Toast, Badge, Tooltip, Skeleton, and more — all following the soft neomorphic visual language with CSS variable theming.

  • Raised/pressed/accent Card variants
  • Framer Motion entrance & interaction animations
  • CSS variable theming for easy dark mode extension
  • Responsive, accessible, keyboard-navigable

Stripe Billing & Token Economy

A freemium model with three tiers (Starter, Growth, Team), annual/monthly billing cycles, and purchasable token packs. Webhooks keep subscription state in sync, and idempotency checks prevent duplicate processing.

  • Stripe Checkout for subscriptions & one-time token pack purchases
  • Webhook handler with signature verification & idempotent event processing
  • Token usage tracking per billing period with overage billing support
  • Lazy-initialized Stripe client via Proxy for serverless cold starts
13

What I Learned

AI integration is a design problem, not a technical one.

The initial implementation was too sensitive. It pattern-matched too eagerly, found connections that weren't meaningful, and felt like an over-enthusiastic assistant. The fix wasn't better prompts alone. It was rethinking what the AI should be in this context: a mirror, not a coach.

AI Tool Use > Free-form Chat

Structured tool calls that return typed data are far more useful than free-form text. The UI can render proposals as interactive cards rather than parsing markdown.

Research-first design pays off.

Starting with behavioral science literature meant every feature had a “why.” It prevented scope creep and gave confidence to say no to gamification patterns.

Habituation requires removing friction at the hardest moments.

The blank-page problem isn't a motivation problem. It's a friction problem. On low-insight days, the activation energy to journal spikes. The AI companion and quick entry types lower that energy by giving you something to respond to instead of something to generate.

The neuroscience changed the product.

Learning about the ACC and future-self continuity research reframed the entire tracking system. Before, commitments were just data. After, they became opportunities to strengthen the neural pathway between present and future self. The science didn't just inform the design. It became the design.

I built this because I needed it.

I use Writrospect. That's the best design feedback loop. When something feels wrong, I notice it immediately because I'm the user.

Built with

Next.jsTypeScriptTailwind CSSFramer MotionClaude APIStripeNeon.techPrismaStack AuthVercel

About

Someone didn't give up on me.
That's why I build.

There is no definitive formulation of a wicked problem.

When I was three months old, I had intestinal volvulus. I wouldn’t stop crying, every doctor had a different explanation, and my parents kept looking until they found one who could see what the others missed.

The choice of explanation determines the resolution.

That persistence saved my life. It also gave me something I’ve carried ever since: the recognition that how you frame a problem determines whether you can solve it at all.

Every wicked problem can be considered a symptom of another problem.

I don’t just say “wicked” because I’m from Massachusetts. In 1973, Horst Rittel and Melvin Webber described wicked problems: the kind where the crying is a symptom of something deeper, and treating the surface never reaches the root.

Every wicked problem is essentially unique.

I started where a lot of CS grads start: writing Perl scripts for an escalation engineering team at Dell EMC, then two jobs in the gaming industry building things that were complex, fast, and fun. But games ship patches. The problems I kept gravitating toward were the ones where you don’t get to patch. I earned a Master’s in bioinformatics because I wanted to bring engineering somewhere the problems don’t repeat: healthcare, government, regulated systems where every deployment is its own context and every patient is their own case.

Wicked problems do not have an enumerable set of potential solutions.

I joined a small studio designing for healthcare and government because the solution space is never closed. There’s no dropdown menu of correct answers. You design, ship, learn, and revise, knowing the next version will be different, not because the last one failed, but because the problem shifted underneath you.

Every solution is a “one-shot operation”; every trial counts.

In regulated environments, every release matters. There are no sandbox deployments when someone’s care depends on the system working. That weight is something I chose, not something I stumbled into.

The planner has no right to be wrong.

When you build software for medical contexts, you carry a specific accountability. The system you ship becomes part of someone’s care, and “move fast and break things” is not an option when the things that break are people.

Wicked problems have no stopping rule.

Over the past several years, that same instinct has pulled me toward problems with no finish line. I started researching neurodegenerative disease on my own, not because I expected to solve it, but because I couldn’t stop looking once I started seeing what others were missing. That’s how I work on everything: once I care about a problem, there is no clean stopping point, only the next question.

There is no immediate and no ultimate test of a solution.

I’ve learned to be comfortable building things I can’t fully validate yet. Whether it’s a healthcare prototype shipping to users whose feedback won’t arrive for months, or a research framework whose predictions won’t be tested for years, the work has to be good enough to act on before you know if it’s right. That uncertainty isn’t a flaw in the process. It is the process.

Solutions are not true-or-false, but good-or-bad.

That’s the lens I bring to everything I build. Not “is this correct” but “is this better.” Better communication, better questions, better tools for the people using them. My independent research on neurodegeneration, Project FELINES, follows the same principle: it doesn’t claim to be the right answer, just a framework that generates better questions than the ones we’ve been asking.

I build software. I design systems. But what drives me is the same thing that’s driven me since before I could talk: someone needs to keep looking until they find what the others missed.

Contact

Let's build something together.

Interested in working together, have a question, or just want to say hello? I'd love to hear from you.