← Case study

Decision Log — my contributions beyond the AI

Format: Decision — why (the user need or insight it answers). Final prototype: 04-app/index.html (Alpenglow Combined). Ecosystem map and user flow: sections 2 and 3 of the case study (index.html). AI baseline: 01-ai-baseline/.


1. Context & users

Context (WEF Annual Meeting, Davos): about 3,000 senior leaders over five days. Official sessions run in the Congress Centre; meetings and events also happen in hotels along one long street, the Promenade. Walks are 3–16 minutes, every secured building has its own security check, badge levels control access, and each day is anchored by fixed meetings.

Primary user — time-poor executive delegate (CEO, minister): 60–90 minute gaps between one-to-one meetings. Wants the highest-value use of that time with no effort. Secondary user — first-time participant: overwhelmed by the programme, wants discovery and connections. I designed for the executive; the same planner, plain reasons and session pages that explain each session's rules help a newcomer too. A first-day guide to how Davos works is in Should.

Key user needs

Working list (2026-10-17). The final assignment document keeps only needs 1–9; 10–11 stay here for reference.

#NeedHow the prototype answers itStatus
1Find sessions relevant to my goals. Help me choose based on my interests and what I want to achieve at the event.Planner and Explore match on registered interests and speakers I follow; the plan sheet asks "What do you want from it?" (learn about my topics, meet the right people, or both), and "Meet the right people" ranks sessions by who will be there and says so ("Daniel Ortiz will be there"); "Fits my afternoon" and "Near me" filters.Built (two goals; finer goals such as "meet energy investors" later)
2Build a realistic afternoon plan. Account for my available time, current location, session durations, travel and entry requirements.Time window (now → until), starting point, "How far will you go?", walking time + live security queue per building, one time engine for every number.Built (entry rules shown as protocol labels; invitations aren't checked)
3Protect my important commitments. Keep confirmed networking meetings and sessions I mark as essential intact when suggesting changes.Fixed meetings are locked ("Fixed · never moves"). Any session can be marked Must-go: the planner keeps it, adding a session that overlaps it is blocked, swipe-to-remove resists.Built
4Understand why a recommendation suits me. Explain its relevance and practical fit.Plain reasons on every proposal and a "Why it's here" section on the session page (interests, speaker you follow, same building / minutes away). No % scores.Built
5Know whether I can actually attend. Make access requirements and availability clear. Adding a session to the plan should not imply a guaranteed seat.Live seats bar and "X of Y left", "filling, arrive early", Full; protocol label (Public / Chatham House / Closed, invitation only); "Saving it doesn't hold a seat. Entry is first come at the door."Built
6Compare options and stay in control. Let me inspect details, replace recommendations and approve changes before they affect my plan.Proposal before adding, where any session can be opened, swapped for its backup or taken out (with Undo); session page; ranked backups; every change opens a preview ("nothing changes until you confirm"); Undo on every change.Built
7Recover quickly when something changes. Adjust only the affected part of my afternoon.Curveball fix in place, ranked by fit, with spare minutes before Mateo; running late; queue surge; offline. Nothing else moves.Built
8Know where to go and when to leave. Clear venue information and enough transition time.Live "you are here" on Today (venue, plus room when in a session); leave times with buffers; route sheet with map, security point, room and floor directions, shuttle; venues map.Built
9Avoid an exhausting schedule. Leave room for breaks and informal conversations.Pace (Light / Balanced / Packed) and a "Keep a 30-min break" switch (on by default): the planner only builds plans with at least 30 min free between items, and the proposal shows it ("38 min break at 17:00").Built
10Know who's in the room before deciding to go. (Privacy: only attendees who chose to share are named; others are counted, e.g. "6 other energy leaders".)"Who's in the room" on the session page, opt-in only.Built
11Understand a session's protocol at a glance (Public, Chatham House, Closed), so I know what I can share, stream or quote.Protocol label on every card and on the session page with what it means.Built

Key assumptions

Merged 2026-10-17: the user's 12 assumptions, reworded where they contradicted the built app, plus the Davos context the features rely on.

  1. We are designing for an invited, in-person WEF delegate. This gives us a specific primary audience. We don't assume their credentials grant access to every session or independently organised event (Closed sessions show "Invitation only").
  2. The Davos Annual Meeting is our reference setting. The brief only says "World Economic Forum"; the Annual Meeting is its flagship event (2027: 18–22 January, Davos Congress Centre). The prototype is set on Wednesday 20 January 2027 and uses a small, clearly labelled sample agenda (people, sessions and companies are fictional), not the complete event.
  3. Interests and available time come prefilled from registration; the attendee confirms or edits them. A time-poor delegate shouldn't fill in a form from scratch. The plan sheet opens with everything already filled in, so she can plan in one tap: a small summary at the top ("12:50 → 17:30 · Around 🔒 Mateo 15:25 · 🔒 Dinner 17:45"), then every setting visible and prefilled, and a live count next to the button ("10 sessions fit · 3 will be picked"). She can say what she wants in her own words, typed or by voice ("AI policy, nothing far, starting in an hour"), and the sheet shows what it understood as tags so she can check it. An earlier version hid the settings behind an Adjust button to avoid the baseline's "too many questions" problem; I reverted that, because the settings are already answered from her profile and calendar, so she isn't asked anything, and one extra tap to see them was worse than a longer sheet. If nothing fits, the sheet says so and offers the two changes that help most ("Add AI · 2 fit", "Allow any distance · 1 fit").
  4. Location is automatic when allowed (GPS outdoors, beacons indoors), manual otherwise. Location permission is optional: the core flow works by picking a starting venue by hand.
  5. Fixed commitments are synced from the attendee's calendar (simulated in the prototype). The app never moves them.
  6. Basic session information is available: titles, topics, speakers, start and end times, venues, protocol and admission rules.
  7. Availability updates can reach the app for supported sessions (e.g. seat counts from badge scans at the door). We simulate them in the prototype; we haven't established that every Davos venue provides live capacity data.
  8. Travel and entry buffers can be estimated. Walking times come from public listings (Belvédère ~3 min from the Congress Centre, Morosani ~13 min, Seehof ~16 min); security queues are per-entrance estimates. Prototype values are labelled assumptions, not guaranteed walking or queue times.
  9. The affected session is saved, but its seat is not guaranteed. Entry is first come at the door. This explains how it can become full 20 minutes before it starts without implying that a confirmed reservation has disappeared.
  10. The networking meeting is a fixed commitment. The app never moves it, and never asks the other person to move it either. Everything else is planned around it.
  11. Our test scenario is one afternoon: three sessions, a 1:1 with Mateo at 15:25 and dinner at 17:45. This is a design choice, not a measured average of WEF attendance.
  12. A suitable replacement may not always exist. The app offers a break (skip and prep), a verified remote alternative (live stream or replay, Public sessions only), or says plainly that nothing fits.
  13. Chatham House sessions have an official note-taker (a rapporteur), and the Forum shares those notes with the app, without names. The 3-point brief in Missed sessions depends on this. We haven't confirmed that WEF provides it.

Davos context the features rely on

MVP priorities

Must (built in the prototype)Should (designed next)Later
Plan my afternoon (time window, interests, start location, distance, pace)Plan the whole week in one go, the evening before (Calendar already plans one day at a time)Indoor floor maps and crowd heat
Plain-language "why this" reasons (no fake % scores)Search speakers by expertise ("AI policy")AI introductions between people
Timeline anchored on fixed meetings, with leave times (walk + live security queue)The other person's accept / decline flow for meeting requestsGroup / delegation agendas
Exact conflict and tight-connection detectionRoom or time changes re-plan automatically, with a previewOrganiser broadcast console
Live capacity alert with swap in place (curveball)Lock-screen live activity while walking; watch complicationChat assistant
Protocol label on every sessionA first-day guide to how Davos works, for first-time participants
"Who's in the room" (opt-in)
Itinerary editing: add, remove, swap, stream instead, undo
Route with security point, room directions and shuttle
Speakers, people and meeting requests; updates list

2. Process decisions


3. Critique of the AI baseline

  1. Time logic breaks at the critical moment. At 13:55 Up next reads "In 5 min · Leave by 13:53" with an amber "Soon" pill — the leave-by has already passed and nothing tells the user they're late. (Code: "Soon" shows whenever leave-by is within 10 min, including when it's in the past; there is no "late" state.) — 07-late-leave-by, 07b-late-leave-by-snow
  2. Numbers contradict each other. At the same moment (12:40) free time reads 4h 15m on Home, a 5h 50m window on the Plan form and 1h 57m in the Plan result; My day counts "2h 30m free" starting before "Now". Home says 2 commitments, My day says 3 still to come. After a swap, the plan claims "4 new sessions" while still showing "5 in plan". One contradiction and an executive stops trusting the app. — 10a–10h, 05b
  3. The curveball isn't solved. The "session full" alert fires on a fixed 5-second timer after accepting a plan, not in relation to when the session starts. It offers a single alternative labelled only by match %, walk minutes and "Filling fast" — no "ends X, Y min to spare before your meeting", no ranking by fit, no "skip and prep for the meeting". The scenario isn't even staged: the bilateral is at 16:15, hours after the session, not immediately after. — 08-capacity-alert, 08a
  4. Conflicts are binary and imprecise. Adding a 14:30–15:15 session over a 14:00–15:00 one opens a red "Overlaps" label with no time range; the fit card says "Overlaps 14:00–15:00" — the whole saved slot, not the real 30-min overlap (14:30–15:00). Every overlap is treated as all-or-nothing. — 09-conflict-sheet, 09b–09d
  5. Fake AI confidence. Scores like 98% vs 37% sit on every card, implying precision. (Code: the % is computed from the session's ID number and start time, not real relevance.) A CEO can't act on "79%" — they need a reason. — 02-discover, 05-plan-result
  6. Built for browsing, not for a time-poor executive. A six-question form for someone with no time; 4–6 chips per card; red used for "few seats", "full", "conflict" and "room change" alike; four overlapping ways to edit (Edit, Adjust, •••, Re-plan rest of day), where "Re-plan rest of day" risks exactly what the brief forbids — rebuilding the itinerary. The private bilateral is styled like any other row. — 04-plan-form-full, 11a–11e
  7. Generic visual identity. Navy-and-sparkle SaaS look with nothing that feels like WEF, Davos or a trusted assistant. — 01-today

Evidence: 01-ai-baseline/screenshots/ (index in INDEX.md)

How the final answers each weakness

#Final prototype
1Real "late" and "tight" states with the exact minutes ("You're 3 min behind"), "Leave now" instead of a past time, and options to recover.
2One time engine: Today, Calendar, routes, fixes and free-time totals all read the same numbers.
3Fires at T-20 relative to the session; fixes ranked by fit with exact spare minutes before Mateo; one tap to swap; undo.
4Conflict sheet with the real overlap ("Overlaps … by 45 min, 16:15–17:00"), the exact leave time, or how many minutes of it you would actually catch. Calendar also shows a conflict she didn't cause. When the organisers move a session into a fixed meeting, its card says "Moved to 15:45 by the organisers" and "Overlaps Mateo by 10 min", with Swap it or Keep both (which says she'd arrive 16:11, 26 min late).
5Plain reasons ("AI and Energy, two of your interests · In the building you'll already be in"). No percentages anywhere.
6Summary-first plan sheet: plan in one tap, or say it in your own words (typed or voice), with every setting prefilled and visible, and a live "N fit · M will be picked" count that suggests what to loosen when nothing fits (end time picked by commitment, location from where you are with Change, breaks as one switch); one action line on Today; red only for real risk; fixed meetings marked with a lock and never removable. "Plan the rest of my afternoon" is not the baseline's "re-plan the day": it only replaces what is still ahead (fixed meetings, must-go sessions and anything already started stay), shows exactly what it adds and drops before you accept, has Undo, and is hidden while a session is at risk, so it is never the fix for a broken slot.
7Alpenglow Combined: soft Davos light, liquid glass, winter Davos photography, a fixed type and spacing system (§7).

4. Material improvements (brief items a / b / c)

a. Product / system decision — Fixed meetings are anchors, one time engine. The plan is built backwards from the meetings that can't move. One engine is the single source of truth: every leave time = walk + live security queue + a buffer (5 min before fixed meetings, 10 for sessions that are filling, 3 otherwise; if the previous item ends 15 min or less before you must leave, you leave when it ends). Nothing may end too close to a meeting to reach it. Fixes weaknesses 1–3 in one decision.

b. Original interaction — Swap in place. The AI baseline's capacity alert offered a single swap labelled with a match percentage, applied with no preview (weakness 3). Here, when a session breaks, its card expands from where you tapped into the fix: options to pick from, with one button at the bottom that says what happens: three other sessions, the best fit saying why ("Same topic (Future of Work) · 63 seats left · ends 15:10 in Mateo's building"), then watch or skip, with the reason one option is not suggested ("Trade in a Fragmented World isn't suggested. It runs until 15:30, so you'd have to leave at 15:18 for Mateo and miss the last 12 min."). Each option already shows its leave time, seats and minutes to spare before Mateo, so the button acts straight away: "Swapped to Reskilling at Scale. Leave 14:23. Nothing else moved.", with Undo in the toast. Only that slot changes. (An earlier version opened a second preview sheet on top of the options; on review it repeated the same facts and stacked two layers for a reversible change, so I removed it.) Backups are pre-computed for every session, so they are always waiting. In Calendar, every session card she can still change has a ••• menu with Swap session and Remove session (never on fixed meetings). Swap opens the options, and remove comes with Undo. I first tried an Edit button that revealed icons, then icons on every card. The menu keeps the cards calm and is a pattern people already know. I kept it behind Edit so a stray tap with gloves can't remove anything.

c. Visual detail — The whole look, rebuilt. The AI's first version looked like any navy SaaS conference app (weakness 7) and used red for everything (weakness 6). I replaced it with one visual system, Alpenglow (§7): soft Davos light, glass cards, winter Davos photography, and a fixed type and spacing scale. Opening a session turns its venue photo into the whole screen. The detail that carries it: colour means one thing only. The screen warms only when a decision is needed, red appears only for real risk, green only for "on time", so she can read her situation at a glance, on the move, with gloves on. After a fix, the greeting turns to "Sorted, Amara".


5. Original feature beyond the brief

Missed sessions — when you can't be in the room, what was said still reaches you, and the session's protocol decides how. The brief asks for recovery from a full session, not for any of this. The AI baseline already offered a plain livestream for a full session; what is new is that delivery follows the protocol:

The curveball uses the Public branch as one of its recovery options; the feature itself is the protocol-aware delivery of what you missed.

Supporting interaction: "Request a meeting" with anyone who shares their attendance, offering only 15-minute slots that fit both plans with no extra walking.


6. Curveball resolution (staged exactly as the brief describes)


7. Visual direction — Alpenglow Combined (final)

How we got here

  1. "Alpine calm" (cream, green, serif) — rejected: decorative rather than useful. Kept in 02-final/iterations/.
  2. iOS native — rejected on review as "boring and SaaS": familiar, but it showed no design point of view.
  3. Six directions on live phones (Timetable, Alpenglow Glass, Venue, Bento, Briefing, Quiet Native), all with the same content, so only the design differs.
  4. Cut to four. I dropped Timetable and Quiet Native: too much text, no imagery, hard to scan.
  5. Venue rebuilt after I pointed out the blur was wrong against the reference: the photo is the whole background, with no solid fill, and a progressive blur rises as you scroll.
  6. Combined into Alpenglow. I took Venue's photo page for every session detail and Bento's two-up "Fits your gaps" tiles. I tried Briefing's one-sentence greeting and Bento's three-number stats row, then rejected both and returned to Alpenglow's own headline, chips and card, adding only the walk time to the card.
  7. Two full apps compared page by page (Alpenglow Combined vs Bento). I chose Alpenglow Combined; Bento is kept in _backup/04-app-two-directions/.

The system


8. Iteration 2 — fixes from my review of the working prototype

(Made in the iOS version; all of them carry into the final.)

Timing integrity (one rule, used everywhere)

Today shows the whole day, and lets the attendee choose. Every item at a glance (fixed ones locked) and sessions that fit, each with a plain fit label and a + button. The user decides what to add; the app checks it fits.

Routes live on the connection, not in a Map tab. The question is always "how do I get to my next thing?": exit → walk → security point → room floor, with a shuttle alternative in snow or for long walks.

Urgency hierarchy. When something needs action it takes the top of Today and the calm line steps aside.

Never interrupt a fixed meeting, never hide anything. A security-queue alert at 15:40 during Mateo arrives straight away and says there's no need to leave early, because nothing changes before 15:55. An earlier version held the alert until the meeting ended; the user dropped that because the app can't be sure she's really in the room, and a hidden alert would fail her if she had skipped the meeting.

Running late as a choice. "Stay with Mateo, send me the brief" comes first.

Smaller fixes. The button names the action ("Swap to Reskilling at Scale", "Stream instead", "Skip it").


9. Iteration 3 — final direction and my review of it

Wider experience made clickable (the brief asks to map agenda, speakers, venues, networking and live updates):

Plan my afternoon sheet, after my review

Session page. The description and what the protocol means now sit right under the title, so a first-time participant knows what the session is before adding it.

Route reachable from Today. The leave chip on Up next and the walk chip under the headline open the route.

Mateo is a 1:1 meeting, and is now labelled that way.

Real-world correction. Checking Davos against public sources showed our walking times and map were wrong (Seehof was 11 min; it's ~16, and Seehof and Morosani were on the wrong sides of town). Corrected to the real Promenade order; every number in the app recalculated from the engine.


10. Error and recovery states covered

Session full (curveball) · running late · tight connection (security surge) · alert during a meeting (says whether to leave early, nothing hidden) · poor signal / offline (plan, maps and briefs cached; "Updated 14:02"; changes sync when you’re back online) · heavy snow (walks +30%, "18 min (usually 14)", the shuttle leads when it's faster) · a session filling fast (one heads-up, backup named) · adding a session that overlaps (exact overlap, exact leave time) · a session that can't fit a fixed meeting or must-go (exact minutes she'd catch; save the replay and summary instead of a live stream) · a session that’s full but streamed · a seat opening again in the session that filled · the planner can’t finish (shows where it stopped, nothing changes, Try again) · not enough time (names the first session that would fit and offers to plan until then) · every change has Undo.


11. What came from me, and what came from the AI

From me (the AI did not propose these):

From the AI (Claude Code): the plain baseline; the evidence screenshots; verifying my critique claims (some didn't reproduce and were corrected); turning my decisions into the time engine, screens and motion; proposing direction variants, layouts, copy and edge cases for me to accept or reject; the research behind the Davos corrections; automated testing of every flow.


12. AI tools used and how they contributed

Tools. Claude Code (model: Claude Opus 5.5) was the only AI tool. Visual references came from Pinterest, Mobbin, Dribbble and Cosmos. The photos in the prototype are from Wikimedia Commons (credited in the prototype), not AI-generated. The icons are Lucide (ISC licence, 04-app/LICENSE-lucide.txt). There is no Figma file: the prototype is built as working code, so every state can be clicked.

StageWhat Claude Code didWhat I did
ResearchLooked up how Davos actually works: the 2027 dates, where the venues sit on the Promenade, walking times from public listings, how security entry works. Corrected the data where it was wrong.Asked the questions, decided what to trust and what to state as an assumption.
AI baselineGenerated the first usable version from the plain brief, as a fresh agent with no context. Took 41 evidence screenshots of it.Wrote the prompt, kept the output unedited (01-ai-baseline/).
CritiqueChecked each of my claims against the baseline's code and screenshots. Claims that didn't reproduce were corrected or dropped.Found the weaknesses and wrote the critique (§3).
Design directionBuilt six directions as live phones with the same content, then two full apps to compare. Proposed layouts, copy and edge cases for me to accept or reject.Collected references (Pinterest, Mobbin, Dribbble, Cosmos, screenshots of apps I like), set the visual brief, cut six directions to four, combined them, and chose Alpenglow Combined (§7).
PrototypeTurned my decisions into code: the time engine, the screens, the motion.Made the product decisions (fixed meetings as anchors, swap in place, missed sessions, the plan sheet), reviewed every iteration and sent back fixes (§8–9).
ChecksRan automated browser tests of every flow, and a requirement-by-requirement check of all deliverables against the brief.Decided what to fix, what to cut and what to present.

How I used it. Claude Code was my researcher, builder and checker. The framing of the problem, the critique, the product decisions and the visual direction were mine; §11 lists which ideas came from me and which from the AI. The most useful pattern was asking it to verify rather than create: checking my critique against the baseline, checking Davos facts, and checking the finished work against the brief. That caught mistakes on both sides before an assessor could.


13. Plan sheet, start time (2026-10-18)

I wanted the time at the top of the plan sheet to be something she can change, not a label. She may want to plan from an hour or two from now, not only from now. The card at the top is now two tappable fields, Start and Finish by. Tapping one opens its choices in the card (Now, In 1 hour, In 2 hours or another time; Before Mateo, Before dinner or another time). The separate "Ends at" section is gone, "Starting from" (a place) is now "Leaving from" so it doesn't read like a time, the fixed meetings are a plain line ("Plans around Mateo at 15:25 and dinner at 17:45. They never move.") instead of chips that looked tappable, and Pace says "2 sessions" instead of "up to 2". When nothing fits, the sheet now offers the earliest finish time that works ("Plan until 14:00 · 1 fit") and, after a later start, "Start now". She can also say it ("in an hour", "from 14:30", "after 3pm").

I also removed "Time to prep for Mateo" from the plan sheet's extras. It added a setting most people wouldn't use, and "Skip it and prep for Mateo" is still one of the curveball options. And in every sheet the grabber and the header (title and ×) now stay pinned while the content scrolls under them, the way iOS sheets behave, with a solid band and a hairline once the content has scrolled.

Ask Mateo to meet earlier, removed (2026-10-18). The curveball fix used to offer asking Mateo to move the meeting to 14:45. I removed it. The deck says fixed meetings never move, and with 20 minutes to go a reply from Mateo would rarely come in time. The other options (three sessions, watch, skip) already recover the slot without touching the meeting.

Alerts without a buzz, dropped (2026-10-18). I no longer present "arrives without a buzz during meetings" as a feature. Many people keep their phone on silent anyway, so it isn't a real difference. Alerts during a meeting still say whether she needs to leave early.