K2Neet

Anyone can send a question to an AI. Making the answer worth reading is the frontend's job.

A college friend wanted to build a mobile app for NEET students,1 and asked me to take the frontend. We built it together, and it became K2Neet: pick a subject, ask for notes, a quick answer or a summary, and the AI does the rest.

I handled the entire frontend in Flutter, from designing the UI from scratch to GetX state management, cache optimisation and the Play Store release.

The work also took me away from my editor. I travelled to Surat to sign the legal agreements, and that's where I learned how the legal side of a project works.

not in any tutorial

A home screen that feels alive

The home screen is the first thing a student sees, so that's where the small details start.

A star breathes above the words Start Your Journey, while a shimmer crosses it from bottom left to top right. Each subject has its own colour and icon. And a thin band of light runs around the border of each card in turn, so the screen never feels frozen, even when nobody is touching it.

a shimmer crosses the starlight runs around each card in turn
The home screen, rebuilt. Use 0.5x to slow it down.

A list you can read at a glance

Everything a student asks is saved under its subject, and a long history can easily turn into a wall of text. So each row carries a soft gradient in the colour of its type: purple for summaries, green for Q&A and orange for notes.

You can tell them apart before you read a word.

One button starts something new. Tap it, and the screen blurs, the three options rise one after another, and the plus turns into a close button.

Physics
Today
Summarise basics of ElectricitySummary
What is the unit of force?Q&A
Explain Work, Power, and EnergyNotes
Give notes on Newton's Laws of MotionNotes
Tap the round button to open the menu yourself.

Ask out loud

Long questions are slow to type on a phone, so students can speak instead, and the app turns their voice into text.

faster than thumbs

For anyone unsure what to ask, ready-made questions from the subject sit just below the field.

Voice in, text out.

An answer worth reading

A raw AI reply arrives as one long string, full of symbols. On a phone, that's hard to study from.

So the app never shows the raw text. It parses every reply, handling bold, italics, code snippets and bullet points. The question sits in its own bubble, key terms stand out, points get real numbers, and the text has room to breathe.

And when an answer is worth keeping, it can be exported as a PDF.

Water is called a universal solvent because it has the ability to dissolve a wide range of substances. This property is due to:\n\n1. **Polarity**: Water molecules are polar, meaning they have a partial positive charge on one side and a partial negative charge on the other. This allows them to interact with various ionic and polar substances.\n\n2. **Hydrogen Bonding**: Water can form hydrogen bonds with other molecules, enhancing its ability to dissolve them.\n\n3. **Versatility**: It can dissolve salts, sugars, acids, alkalis, some gases, and many organic compounds.\n\nThese characteristics make water excellent for facilitating chemical reactions and transporting substances in biological and environmental systems.
Ask Anything...
Exported as PDF
One answer, raw and in the app, then exported. The PDF step here is a sketch.

Two typefaces, one mood

The typography does quiet work too. Instrument Serif is saved for headings, like the app's name and Start Your Journey. It has just one weight, which keeps those moments rare.

Everything you read sits in Satoshi, a clean sans that stays clear on a dark screen. Its weights do the ranking: bold for key terms, medium for titles, and lighter weights for the small print.

Used forHeadingsWeights1x-height to cap height0%
On screen
App nameK2 NeetSerif
Screen titlePhysicsSerif
Card titleChemistrySatoshi
AnswerWater is called a universal solvent.Satoshi
CaptionMotion & EnergySatoshi
The word Physics in both typefaces, with the lines measured from the fonts. Tap one to switch.

Colour, icons and motion

The rest of the system follows the same idea: nothing is only decoration. Subjects get a tinted icon, the three modes get a solid one, and actions stay as plain lines, so an icon tells you what kind of thing it is before you tap it.

Here's all of it on one sheet.

Colours sampled from the app's own screens.

The Flutter underneath

Everything so far is what a student sees. Underneath, the app is built in Flutter, and four pieces of engineering keep it feeling as quick as it looks.

State with GetX

A Flutter screen is a tree of widgets. The simplest way to update one is setState, which rebuilds that widget and everything under it. On a home screen full of small animations, most of that work is wasted.

GetX takes a different route. A value is marked as observable, and only the widgets reading it rebuild, so a change to the coins updates the coin pill while the rest of the screen stays as it is.

class WalletController extends GetxController {  final coins = 10.obs;  void spend() => coins.value--;}// Only this widget rebuilds when coins change.Obx(() => Text('${wallet.coins}'));
Widgets rebuilt by this tap0of 8The whole screen builds again, even parts that didn't change.
The same tap, two ways of updating. A simplified tree, and a simplified example above it.

A cache for answers

Asking an AI means a network round trip, and a student often comes back to the same answer. So an answer only has to travel once. The first open fetches it. Every open after that reads from the cache on the phone, with no network call at all.

Time to open an answerFrom the networkFrom the cache
01s2s
1
2
3
4
5
6
7
8
9
10
Open number
Total wait0.0 sNetwork calls0
Time to open an answer, in milliseconds, with the cache off
OpenMillisecondsSource
11900From the network
22300From the network
31900From the network
41700From the network
52300From the network
61900From the network
72100From the network
81700From the network
91900From the network
102300From the network
Ten opens of four answers. Sample figures to show the shape, not measurements from the app.

Parsing the reply

The answer screen from earlier depends on a parser. The reply arrives as a single string, and the app walks through it, turning each pattern into a Flutter widget: asterisks become bold or italic text, backticks become a code block, and a dash becomes a bullet point.

A simplified pass over a sample reply.

Shipping to the Play Store

A release is more than a build. The app is bundled, signed with an upload key, uploaded to the Play Console and reviewed by Google before anyone can install it.

The road from a Flutter project to the Play Store.

Thanks, man

In October 2025, K2Neet went live on the Play Store in beta. My friend's feedback was short:

“Very hard working. Thanks, man.”

I'll take it
The real home screen, with the star, Start Your Journey and four subject cards.
The real Physics history list, with tinted rows and a blue add button.
The real answer screen, explaining why water is a universal solvent.
The real screens from the app.

The AI wrote the answers. I built everything you touch.

See K2Neet on Google Play.

Footnotes

  1. NEET is India's national entrance exam for medical colleges. ↩