Android · bring your own key

An interview bank you cannot exhaust.

Name the role you are preparing for and Faqit writes the curriculum, then generates questions against it with your own LLM key. Backend, data, DevOps, frontend, mobile — the AI engineering tracks are simply what ships in the box. Three difficulty tiers, an explanation on every answer.

v1.6 Android 7.0+ · free · your key stays on the device

RAG & retrieval Core ››

Your RAG pipeline chunks documents at 2000 tokens and retrieval quality is poor. What is the most likely cause?


What it’s for

I made this instead of playing games.

Ten questions takes about three minutes. It is the same three minutes I used to spend on my phone doing nothing. Now something asks me a question I would probably fumble in an interview, and I find out I would have fumbled it.

If you are job hunting

Type in the job you are going for. It writes the topic list and starts asking you about them. Questions are generated new every time, so you cannot get good at the app instead of the subject.

If you already have the job

You use this stuff every day. Saying it out loud to someone who is judging you is a different skill and it gets rusty fast. A few questions a day is enough to keep it.

If you are learning something new

Every answer comes with an explanation, so getting it wrong is the useful part. Anything you miss is saved and you can go back and do only those.

Students

Tell it when your classes are and it will not ping you during them. Placements are one sentence to set up.

Working

Same with office hours. Nothing arrives while you are sat in a standup.

What it will not do. No live coding, no whiteboard, nobody on the other end asking you a follow-up you did not see coming. It is multiple choice on a phone. You still need to practise the rest somewhere else.


The part that matters

The prompt never grows.

The obvious way to avoid repeat questions is to send the model everything it has already asked you. That prompt grows forever — rising cost, context limits, and worse instruction following as the list buries the actual task. Faqit never sends history at all.

  1. A taxonomy of coordinates

    Your tracks × the areas inside each × 3 tiers. The built-in curriculum makes about 500 addressable cells; yours makes its own. A request names one coordinate.

  2. A coverage ledger on the device

    Counts how many questions each cell has produced, then picks the least-covered one. Your priority weighting decides how often a track comes up.

  3. Batches of eight

    One network call feeds most of a run, buffered locally so play never waits on the network.

  4. Fingerprint dedup

    Every question is normalised and hashed on arrival. Duplicates are dropped locally, at zero token cost.

Result

The request body is the same size on question 10 and question 4,000. Diversity comes from aiming the model at a fresh coordinate each time.

Cost

~1,750 input tokens per call. On Claude the static block is marked cacheable, cutting billed input roughly 73% on repeat calls.


Six providers

Three are free, forever.

Add a key for any of them. All six are asked for strict JSON, each given the schema in the form it actually enforces.

Gemini Groq Rewind NVIDIA NIM Claude OpenAI

Gemini and Groq have recurring free allowances large enough to use the app indefinitely. Rewind refills a small pool daily — enough for one run, and the batch is sized to fit it. NVIDIA hands out credits on signup, which run out and do not come back. Claude and OpenAI are billed per token from the first request.

Groq→ Gemini→ NVIDIA NIM→ Rewind Rate limited or down? The next one runs. A run only fails when all of them do — or pin it to exactly one provider when you want to know precisely which model wrote a question.

Keys stay put

Stored on the device and sent only to the provider you chose. There is no backend to leak.

Tested before you play

Each key has a Test button reporting working, failing, or untested — with the real reason.

Validated on arrival

Malformed questions are discarded, and a drop button blocklists any bad one for good.


Scope

Your interview, not a generic one.

There is no fixed topic list. Describe your target role in a sentence and the model writes the tracks, the areas inside each one, and the priority order — a payments backend role and a data engineering role produce two different curricula, and neither is the one below. Refining appends, so nothing you already approved disappears.

One example: what ships in the box. Faqit installs with a curriculum for Applied AI and GenAI Engineer interviews around a year in, so there is something to practise before you have written anything. It is a starting point, not the product — replace it in one sentence. Highlighted tracks are weighted to come up more often.

LLM engineering RAG & retrieval Agents & orchestration Evaluation & testing AI system design Python & backend LLMOps & security ML & deep learning Frameworks & ecosystem Data structures System design
›

Warm-up

Phone screen. The fundamentals you cannot fumble without ending the interview.

0–1 years

››

Core

The main technical round. Connect two ideas, pick between real options, reason about a tradeoff.

1–3 years

›››

Deep

The senior stretch follow-up. Non-obvious failure modes and defending a design under pressure.

3–5 years


After the run

Every question you answer is kept.

Review library

Saved automatically and grouped by the exact area each question came from — not the broad track, the specific thing inside it, whatever those turn out to be for your role. Filter to just the ones you missed and drill those.

Combos and ranks

Consecutive correct answers build a multiplier; XP carries you from Intern to Fellow. The loop that makes games sticky, pointed at something useful.


Changelog

What changed, and when.

Newest first. Every version number matches the one in the app under Menu › About.

1.6 Free providers first, and every model re-measured
  • The failover order now starts with the free providers. Groq, then Gemini, then NVIDIA NIM and Rewind, with Claude and OpenAI last. It used to start with Claude, which meant a fresh install with several keys saved reached for the billed provider first. A run should exhaust what is free before it spends anything.
  • Groq and Gemini model lists rebuilt from measurement. Every candidate was sent the app’s real request — a full 8-question batch — three times back to back and checked against the same validator that runs on arrival. Groq’s two Llama entries are gone: the API no longer serves them. Qwen is added, and the newest Gemini ids are listed. The numbers behind each choice are recorded in the source next to the lists.
  • The newest model is not always the default. Qwen writes good questions but carries a 1,000 output-tokens-per-minute cap, against roughly 2,100 for one batch — so it manages about one batch a minute and no more. The newest Gemini flash ids answered once in five tries; the rest were “high demand”. Both are selectable, and both are labelled with what they actually do, but the defaults are the models that finish every time.

Fixed: a custom track died after a successful generation — the code that files each question under an area looked the track up in the built-in taxonomy, where a track you wrote yourself does not exist, and the whole batch was discarded with Collection contains no element matching the predicate. Also fixed: Qwen models on Groq reason before answering, and that preamble broke JSON mode outright with 400 json_validate_failed; reasoning is now switched off for them.

1.5 Shake to report, a guided first run, and a sixth provider
  • Shake the phone to report a problem. A screenshot is captured of the screen you were actually looking at — taken before the sheet opens over it — then attached to an email with your description, the app version and the device. Nothing uploads: it opens your mail app so you can read the report, and delete anything you would rather not send, before it goes anywhere.
  • A walkthrough on first launch. Four cards explaining where questions come from, how tracks and difficulty work, what the library keeps, and that shaking the phone reports a bug — which nothing else would ever tell you.
  • Keys are tested before models are offered. Expanding a provider shows the key field and one button. The model list appears only once the key is verified, so a provider can no longer be saved in a state that fails on the first real run.
  • Rewind added. A sixth provider with a free pool that refills daily. Small — the batch size is computed against the day’s allowance and varies by difficulty, since a Deep question costs nearly twice a Warm-up one — but free and recurring.
  • Progress and Review on the home screen. The two things people come back for, no longer behind the menu.

Fixed: a custom track with a long name could produce an id past the shared bank’s 64-character limit, and because the bank validates a batch as a whole, one such question silently blocked every contribution from that device — permanently, since the same batch retried each sync. Options differing only in capitalisation passed the app but were rejected by the server.

1.3.1 Any interview, and a Gemini fix
  • Faqit is for any interview. Backend, data, DevOps, frontend, mobile — describe the job and the model builds the topics. The eleven AI engineering tracks are what ships in the box, nothing more. The wording across the app and this page said otherwise.

Fixed: Gemini returned 400 invalid argument on gemini-3.6-flash and gemini-3.5-flash-lite. Both reject the thinkingConfig parameter Faqit sends to cut latency. The request now retries without it. An older guard existed but matched on error text Google never sends, so it never once fired.

1.3 Setup that asks, and providers that were measured
  • Setup is five steps, and the last two can be declined. After your name, key and curriculum, Faqit asks when you are free and whether to share questions. Skipping either is a real answer — it is recorded, not re-asked.
  • Reminders fit around what you actually do. Say whether you are working, studying or neither, and the whole screen changes with you: a student sets class hours on class days, not office hours. The two reminder times are placed either side of that window automatically.
  • Every model is now measured, not assumed. Each one was sent a real eight-question batch and checked against the app’s own validator. Anything that timed out or returned malformed JSON was removed rather than left in the list looking plausible.
  • NVIDIA NIM rebuilt around that. Four models that finish the job, fastest first, each labelled with its real timing. Reasoning models lost across the board — they spend more tokens deliberating than answering, and a multiple-choice question needs no deliberation.
  • OpenAI added; OpenRouter and Cerebras removed. Cerebras was never a recurring free tier, so calling it one was wrong.

Fixed: the first three setup screens still said “step n of 3” after two more were added, because each screen wrote its own total; finishing the curriculum jumped straight to the home screen and skipped the two new steps entirely; the model list advertised four NVIDIA models that could not complete a full batch.

1.2 Custom curriculum, stats and a shared bank
  • Your own tracks. Describe the interview you are preparing for and the model builds a curriculum. Refining adds — it never quietly drops what you approved.
  • Stats you can interrogate. 14-day volume, a 24-hour activity histogram and per-track accuracy. Tap any number to see the questions behind it.
  • Reminders. Scheduled around your office hours rather than through them — a slot inside working hours is skipped, not shifted.
  • Backup and restore. Export everything to a JSON file and import it after a reinstall. API keys are deliberately excluded.
  • FAQ mode. A per-run switch between a mixed spread and only the staples an interviewer actually asks.
  • Shared question bank. Optional, off by default. Contributes only the questions the server does not already hold.
  • New mark, and an ink intro that forms it.

Fixed: providers that ignore response_format were failing outright rather than having their JSON extracted; battery saver and rotation restarted the app and lost your place; a reserved token ceiling was tripping Groq’s per-minute limit on every request.

1.1 Five providers with failover
  • Claude, Gemini, Groq, Cerebras and OpenRouter. Auto mode fails over when one is rate limited; pin to a single provider when you want to know exactly which model wrote a question.
  • Per-provider key testing, reporting the real reason a key or model was rejected.
  • Constant-size prompts: a local taxonomy and coverage ledger mean the request never grows with your history.
1.0 First build
  • Questions generated on demand from your own key — no fixed bank.
  • Eleven tracks, three difficulty tiers calibrated to real interview stages.
  • Combos, ranks and a review library that keeps every question you answer.

Get it

Sideload it and add a key.

Android 7.0 or newer. Not on the Play Store — you install the APK directly, then paste a free key from Groq or Google AI Studio.

Android will warn about installing from an unknown source. That is expected for any app distributed outside the Play Store.