Android · bring your own key
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
Your RAG pipeline chunks documents at 2000 tokens and retrieval quality is poor. What is the most likely cause?
What it’s for
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 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.
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.
Counts how many questions each cell has produced, then picks the least-covered one. Your priority weighting decides how often a track comes up.
One network call feeds most of a run, buffered locally so play never waits on the network.
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
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 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
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.
Phone screen. The fundamentals you cannot fumble without ending the interview.
0–1 years
The main technical round. Connect two ideas, pick between real options, reason about a tradeoff.
1–3 years
The senior stretch follow-up. Non-obvious failure modes and defending a design under pressure.
3–5 years
After the run
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
Newest first. Every version number matches the one in the app under Menu › About.
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.
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.
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.
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.
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.
Get it
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.