Sidequest

A quest system that builds one doable action from interests, time, and place, then remembers what you actually did so the next one is not a repeat.

Type
Cross-Platform
Role
Creative Technologist
Built
-
Updated
-
Source
GitHub

Tech stack

  • React Native
  • Expo
  • TypeScript
  • React Native Web
  • Supabase
  • PostgreSQL
  • AI
  • Reanimated

What if an assistant didn’t tell you what to consume next, but gave you something worth doing?

One quest, sized to the time you have.

Another thing to watch

  • Another video.
  • Another song.
  • Another post.
  • Another article.

Recommendation systems are built to keep a session going. Sidequest refuses that job. The question on the screen is what to do once the phone is down.

A vague wish to make something becomes one action with a time, a place, and the materials it needs. The page stays thin so it cannot become the afternoon.

A quest is an object

A Sidequest is not an AI paragraph. It is a structured experience: an activity, a category, a difficulty, a time, the materials it needs, and a creative objective.

The quest engine decides what is valid. The model only fills variation inside that shape. An open prompt can sound like a plan. A quest can be done today.

lib/quest-engine/quest.ts
type Quest = {  activity: string  category: string  difficulty: 'easy' | 'medium' | 'stretch'  minutes: number  materials: string[]  environment: string  objective: string} // The engine rejects a quest before it is shown.// The model never gets to invent the shape.

Memory of what you did

Memory is not a chat log and it is not a journal. It records experiences: what was tried, what was discovered, what was avoided.

That record is the only thing the next quest is allowed to learn from. Street photography can become a night walk. A long indoor task can stay off the list.

Tried              Street photography
Discovered         Shadows and architecture
Skill              Manual exposure
Avoided            Long indoor activities
Next               A night photography quest

One question on screen

The loop is short: discover, accept, do, complete, remember, return. The screen asks one question. What should I do now?

Navigation stays at Today, a central New Quest, and Progress. Explore, Memory, Groups, and Profile sit behind that, not in front of it.

Discover → Accept → Do → Complete → Remember → Return

The hard part

A generated quest still has to be worth doing

The hard part was never calling a model. It was deciding whether the quest was actually worth doing: actionable, safe, varied, and fitted to the time and place a person has.

Solution

Generation, validation, personalization, and presentation stay separate. The engine sets the constraints. The model varies the quest inside them. A response is not shown until it passes.

Trade-offs

DecisionChoiceWhy
ContentStructured quest dataMore predictable than a free-form reply.
NavigationThree primary itemsThe action matters more than a dashboard.
ProgressQuests, skills, categoriesActivity, not points.
MemoryExperiencesSo this does not become a journal.
InterfaceOne build, phone and browserThe product is used while moving, and reviewed later at a desk.

What I’d change

  • Stronger sense of where the person actually is.
  • Richer offline behavior, for a day with no signal.
  • Better difficulty calibration.
  • Deeper group quests, and chains that last more than one day.

What people assume

So this is a productivity app?

It has a next action, and that is where the resemblance ends. A quest is something to try - a night walk, a roll of film, a drawing with the materials already in the room - not a task to clear.

Does the model just invent the afternoon?

It fills a shape the engine already accepts: activity, difficulty, minutes, materials, environment, objective. An open prompt can sound like a plan. A quest can be started.

Will it ask how I feel?

It asks what you tried, what you found, and what you want to avoid next time. Mood is not a field. This is not a therapy product.

Have an idea...

Have something to build.