DEV Community

Kiran Patel
Kiran Patel

Posted on AI-assisted

Designing a shared daily trivia set in Flutter (without an account wall)

I shipped a small trivia app called Trivia Quest. The product bet is boring on purpose: ten questions, same set for everyone in your language today, with a short explanation after most misses. No ads. Solo play needs no account.

This post is about the Daily loop — not friend rooms, not monetization experiments. If you are building a habit app, the interesting part is what you optimize for.

The habit we wanted

Most trivia apps I tried opened with:

  1. Create an account
  2. Pick seventeen modes
  3. Get scored against strangers immediately

I wanted the opposite: open, answer ten questions, optionally read why I was wrong, close the app.

That implies a few constraints:

  • Shared content — if everyone gets a different random set, you cannot compare scores or talk about "today's question #7."
  • Low friction — account creation is a tax on a three-minute session.
  • Explanations that respect attention — auto-advance is off by default. You can turn on 3s / 5s / 8s in Settings, but the default assumes you might want to read.

Same ten questions for everyone (per language, per day)

We pick Daily questions with a seeded random draw from the published catalog for the player's locale. Same calendar day + same language ⇒ same ten questions.

Why seeded random instead of a hand-curated editorial list every morning?

  • Scale — we ship thousands of questions across categories; manual curation does not scale for three locales.
  • Fairness — everyone debates the same facts.
  • Simplicity — no "editor's pick" pipeline blocking release.

Trade-off: some days feel harder than others. We accept that. Category play still exists if you want a smoother difficulty curve.

Content in Firestore, progress on the device

Questions and categories live in Firestore. Solo progress (seen question IDs, in-progress session, streaks, XP) stays local.

That split was deliberate:

  • Content can update without an app release.
  • Privacy story stays simple for solo play: nothing leaves the phone for category mode.
  • We still use anonymous Firebase Auth only when you opt into friend rooms (separate topic).

For Daily, the client asks: what is today's seed for this locale? then pulls the matching set. Explanations are required on medium and hard questions in the catalog; easy may omit.

Pseudocode for the idea (simplified):

// Same calendar day + locale => same 10 question IDs
int dailySeed(DateTime localDate, String locale) =>
    Object.hash(localDate.year, localDate.month, localDate.day, locale);

List<QuestionId> pickDailySet(int seed, List<Question> catalog) {
  final rng = Random(seed);
  return catalog.shuffled(rng).take(10).map((q) => q.id).toList();
}
Enter fullscreen mode Exit fullscreen mode

In production we filter to published questions for that locale and dedupe against validation rules — the point is deterministic selection, not Random() per user.

Explanations without turning into a textbook

The failure mode for "educational trivia" is a paragraph after every tap. We tried to keep explanations one beat long — enough to anchor the fact, not a Wikipedia sidebar.

Product rule: medium + hard need an explanation before publish. Marketing copy says "on most questions" because easy items may skip it.

Default auto-advance is Off. Early testers who wanted speed could enable it. Making "read the explanation" the default nudged the tone we wanted.

What we are not optimizing yet

Friend compete exists (short room codes, RTDB for live state). It is secondary in how we talk about the app until the Daily habit feels solid. Speed scoring is fun; it is not the wedge.

Web is a light entry point at jointrivia.app — landing and invites, not a full client pitch.

Stack (if you are curious)

  • Flutter — UI shell, Riverpod for session state; Flame on play surfaces where motion matters
  • Firestore — categories, questions, explanations
  • Firebase RTDB — live room state for compete
  • FCM — opt-in daily reminder topics (no token warehouse; fail-closed design)

Try it / tell me what breaks

If you build consumer mobile apps, I would genuinely like feedback on one thing: after a wrong answer, do you read the explanation or tap Next immediately?


Links (disclosure: I'm on the team behind Trivia Quest / Numoro Tech):


Questions I am still thinking about

  • Should Daily ever let you pick a category, or does that break the "shared set" magic?
  • How many questions is the right daily dose — ten felt right on paper; I watch completion rates.

Happy to answer Flutter / Firestore questions in the comments.

Top comments (0)