khaali.
rail booking prototype
{{ h.icon }}
{{ h.title }}
{{ h.sub }}
{{ h.kind }}
Nothing matches that. Try a station name or code, a train name or number, or a quota.
SOS
₹{{ walletBal }}
🔔{{ bellCount }}
Service alerts \u00b7 your favourites
{{ a.t }}
{{ a.sub }}
All clear \u2014 none of your \u2605 trains are cancelled in the next 7 days. Star a train to watch it here.
{{ clockTimeText }}
{{ clockDateText }} · {{ clockTagText }}
{{ themeIcon }}
{{ city }} ▾
{{ navBurgerIcon }}{{ navBurgerLabel }}
{{ n.label }}
Synthetic dataNot affiliated with IRCTC
{{ n.label }}
BENGALURU — MYSURU CORRIDOR

Berths that are already empty

A berth booked only as far as Bengaluru sits empty for the rest of the run. Pick your two stations and we count those.

DATE
{{ dateBtnText }}
{{ calHead }}
{{ calPrev.glyph }}
{{ calNext.glyph }}
{{ d.t }}
{{ c.t }}{{ c.n }}
Search trains →
Availability for your exact stretch · held for 5 minutes while you pay
CHOOSEYour two stations
SEEBerths free en route
PAYOnly for your stretch
{{ strTitle }} Counted from the chart
{{ strFromCode }} {{ strFree }} berths free on your stretch
{{ strToCode }} {{ strPart }} open en route
{{ strEndA }}{{ strMid }}{{ strEndB }}
{{ l.title }} {{ l.note }}

{{ r.title }}

See all
{{ c.freeTxt }} {{ c.partTxt }}
{{ c.no }} {{ c.depTxt }}
{{ c.shortName }} {{ c.routeShort }}
SL 3A 2A {{ c.stopsTxt }}

A prototype. Not affiliated with Indian Railways or IRCTC, not a booking service, no live railway system is touched. Timetable derived from data.gov.in; berths, bookings, fares and confirmations are synthetic. Card images are yours to drop in.

About this prototype →
{{ isleTitle }} {{ isleRight }}
Ask Saarthi
S
Saarthi
{{ chatSub }}
{{ chatLangLabel }}
{{ m.t }}
{{ m.spk }}
{{ m.linkLabel }}
TRY SAYING
{{ g.t }}
{{ g.s }}
End call
{{ chatRecTime }} · Listening… tap mic to finish
{{ o.n }}{{ o.c }}{{ o.km }}
{{ pHeadTag }}
{{ o.n }}{{ o.c }}{{ o.km }}
Date {{ dateBtnText }}
{{ calHead }}
{{ calPrev.glyph }}
{{ calNext.glyph }}
{{ d.t }}
{{ c.t }}{{ c.n }}
Search
Rank by
{{ t.l }}
How
All
{{ m.l }}
{{ pHireNote }}
Leave after
{{ t.l }}
Reach by
{{ t.l }}
{{ pStepTick }} I need a lift or a ramp
Anywhere
◎ {{ t.l }}
● {{ t.l }}
{{ pPickNote }}
Or just say it
{{ pSayNote }}
Where are you, and where to? Let the phone say, or put a finger on the map. khaali names the point back to you and plans from there — no station required.
{{ e.cap }} {{ e.armed }}
{{ e.name }}
{{ e.hereLabel }}
{{ e.pinLabel }}
{{ pPickNote }}
{{ pGeoNote }}
{{ pMapPlainLabel }}
Search from here
{{ pcLead }}
{{ r.label }}
{{ o.n }}{{ o.c }}
×
{{ r.hopLabel }}
{{ c.l }}
{{ pcAddLabel }}

{{ pHeadFrom }} {{ pHeadTo }}

{{ pHeadTag }}

The whole way, in one place: the train, the walk nobody mentions, the bus, the metro. Book the journey here — the train, and a trip pass for the bus and the metro on it, spent when the trip is.

{{ pSummary }} {{ pWays }}
{{ pGeoNote }}
{{ pAxisLead }}
{{ a.label }}
Working out the trains, the walk and the metro…
{{ pErrText }}
{{ pTryHireLead }}
{{ h.l }}
Pick where you are starting and where you are going, then press Search. khaali plans a train into the city and the Purple Line beyond it — and says so plainly when a pair is not on this demo yet.
{{ pcErr }}
{{ pcHead }}
{{ s.title }}
{{ s.when }}
{{ g.t }}
{{ s.alt }}
{{ pcNote }}
{{ pcBookNote }}
{{ pcBookErr }}
trip pass
{{ pcPassHead }}
{{ pcPassSub }}
{{ r.t }}
{{ pMetroHead }}
{{ pMetroLine }}
{{ st.title }}
{{ st.sub }}
{{ pMetroFare }}
{{ r.modeLabel }} {{ r.via }} SAARTHI SHOWED YOU THIS {{ r.rolePill }} RECOMMENDED {{ r.seatWord }}
{{ r.unreserved }}
{{ r.depTime }} {{ r.fromName }}
{{ r.arrTime }} {{ r.toName }}
{{ r.durTxt }} {{ r.changesTxt }} {{ r.qWord }} {{ r.delta }} {{ r.fare }} /person
{{ l.t }} {{ l.note }}
{{ r.cardChip }}
{{ r.cardHeadline }}
{{ r.cardWhyHead }}
{{ r.cardWhy }}
{{ r.cardChooseIf }}
{{ cr.head }}
{{ cr.text }}
{{ r.cardVsHead }}
{{ cp.t }}
{{ r.cardCmpBtn }}
{{ r.cardCmpThis }}{{ r.cardCmpAlt }}{{ r.cardCmpChanges }}{{ r.cardCmpHow }}
{{ bt.v }} {{ bt.l }}
{{ st.num }} {{ st.action }} {{ st.time }}
{{ st.route }}
{{ st.body }}
{{ r.cardGaps }}
{{ r.cardDisclosure }}
{{ r.loadWord }} {{ r.loadPct }}
{{ r.loadNote }}
{{ r.cardStepsBtn }}
{{ r.stepLabel }}
{{ r.whyLine }}
Every step of it
{{ r.jmapNote }}
{{ pTrafficLabel }}
{{ pMapPlainLabel }}
{{ pRoadNote }}
{{ r.splitWhy }}
{{ r.whyTraffic }}
{{ pRailNote }}
{{ st.time }}
{{ st.title }} {{ st.badge }}
{{ st.detail }}
{{ pNoteText }}
{{ pEndHireLead }}
{{ h.l }}
{{ pDropHireLabel }}
{{ pTripHead }}
{{ pTripSub }}
Open the pass ↗
Ask about the recommended way
{{ pAskAns }}
{{ pAskBy }}
The network
One recommendation is a courtesy. Ten thousand of the same one is a crowd.
{{ c.l }}
{{ pSimFinding }}
Today
Allocated
Change
{{ s.k }}
{{ s.b }}
{{ s.a }}
{{ s.d }}
{{ pSimNote }}
The other side of it The whole city, coloured ↗ Where people are waiting ↗ Conductor ↗ The conductor page is a simulation. No bus operator is connected to khaali, and every number that comes from it is labelled simulated wherever khaali uses it.

{{ fromName }} → {{ toName }}

{{ resultsCount }} trains · {{ dateLong }} · {{ journeyKm }} km
Counts are for your two stations, not the whole train. Blue numbers are berths that free up en route.
From
{{ o.n }}{{ o.c }}{{ o.km }}
To
{{ o.n }}{{ o.c }}{{ o.km }}
Date
{{ dateBtnText }}
{{ calHead }}
{{ calPrev.glyph }}
{{ calNext.glyph }}
{{ d.t }}
{{ c.t }}{{ c.n }}
● plenty ● filling ● almost gone
Search
{{ f.cap }} {{ f.value }}
{{ o.label }}
Clear filters
Sort by
{{ resSortLabel }}
{{ o.label }}
{{ g.title }} {{ g.n }} · {{ g.sub }}
{{ r.name }}
{{ r.no }} · runs daily
{{ r.live }}
{{ r.dep }}
{{ r.fromCode }}
{{ r.dur }}
{{ r.arr }}
{{ r.toCode }}
{{ c.k }} · ₹{{ c.price }}
{{ c.freeText }}
{{ c.partText }}
{{ r.favGlyph }}
Can’t decide?
Tell khaali what you need, not which train
Give a window of departure times and the most you would pay. khaali watches every train that fits and books the first whole berth, taking only what it costs. The rest of your block is released.
{{ ordKicker }}
{{ ordRoute }}
{{ ordDate }} · {{ ordPaxLabel }}
×
Leave after
{{ c.t }}
Leave before
{{ c.t }}
{{ ordPinLine }}
Any of these classes
{{ c.t }}
Travellers
{{ ordPax }}
+
Who is travelling
{{ ov.label }}
{{ op.n }}
{{ ordTravNote }}
{{ ordCapLabel }}
{{ ordQuoteText }}
{{ r.dep }}{{ r.name }}{{ r.cls }}₹{{ r.price }}
{{ ordBlockNote }}
If this does not confirm
{{ m.t }}
{{ ordFbLocked }}
Classes khaali may move me to
{{ c.t }}
Must arrive by
{{ a.t }}
And at most this much more than the fare
{{ x.t }}
{{ ordFbNote }}
Block it with
{{ c.t }}
{{ ordWalletLine }}
Demo PIN 123456
{{ ordErr }}
Block request QR
Approve the block on your phone
Scan with any UPI app. Your bank blocks {{ ordQrAmt }}, debits nothing, and khaali starts watching {{ ordQrWatching }} trains the moment it is approved. This screen closes on its own.
Corridor map · 208 km · timetable data.gov.in

Bangarpet ⇄ Mysuru Jn

128 real trains, one corridor. Watch them run on the live map below — click any train to follow it.
Live map · real geography · simulated positions
Open full screen ↗
{{ posterFbViaText }}{{ posterFbNoText }}{{ posterFbNameText }}
{{ trainDur }} · {{ trainStops }} stops · {{ trainKm }} km

{{ trainTitle }} {{ heroFavGlyph }}

{{ trainCxText }}
{{ tFree }} free ({{ tPart }} open up en route)
{{ trainDur }}{{ trainClasses }}{{ trainStops }} stops{{ trainKm }} km
{{ t }}
{{ bookDateNote }}
Live running status
{{ liveBadge }}
as of {{ liveNow }} · updating live · simulated
{{ s.code }}
{{ liveLine }}
All stops
{{ r.name }}
{{ r.km }} km
arr {{ r.arr }} · dep {{ r.dep }}
{{ r.tag }}
Why this train shows berths others do not
{{ e.h }}
{{ e.b }}
{{ d.dow }}
{{ d.day }}
{{ d.mon }}
NEXT
60
DAYS ▾
{{ calHead }}
{{ calPrev.glyph }}
{{ calNext.glyph }}
{{ d.t }}
{{ c.t }}{{ c.n }}
● plenty ● filling ● almost gone number = berths free your whole way, all trains · colour = how full the day is
Today
{{ calFootNote }}
{{ f.label }} ▾
{{ o.label }}
{{ trainTitle }} | {{ fromName }} → {{ toName }} | {{ clsLabel }} · {{ quota }} quota Change
{{ boardExplain }}
{{ c.label }}
{{ boardEmptyText }}
{{ soloTitle }}
{{ soloSub }}
{{ s.code }}
{{ s.name }}
{{ s.meta }}
{{ s.dep }}
{{ s.tag }}
{{ soloArrive }}
{{ b.code }}
{{ b.name }}
{{ b.sub }}
{{ b.flag }}
{{ b.groupLabel }}
{{ s.timeLabel }}
{{ s.subLabel }}
{{ s.availLabel }}
₹{{ t.price }}
{{ t.label }}
{{ t.status }}
{{ s.tipNote }}
{{ trainTitle }}
{{ fromName }} → {{ toName }} · {{ dateLong }} · {{ depTime }}
{{ paxCount }} passengers · {{ clsLabel }}
{{ modeAnyTitle }}
{{ modeAnySub }}
{{ modeExactTitle }}
{{ modeExactSub }}
{{ pickBannerGlyph }} {{ pickBannerText }}
{{ wlTitle }}
{{ wlSub }}
{{ wlRule.linkText }}
The rule
{{ wlRule.rule }}
{{ wlRule.src }}
khaali
{{ wlRule.khaali }}
What the colours mean
{{ l.title }}
{{ l.sub }}
{{ l.price }}
{{ partNote }}
{{ seatHeadline }}
{{ seatSub }}
{{ seatLower }}
{{ seatNoticeText }}
{{ st.n }}{{ st.label }}
{{ storyTitle }}
{{ storyBody }}
{{ storyBig }}
{{ storyBigSub }}
This train, for real
{{ packSub }}
Free end to end today
{{ packBefore }}
After repacking
{{ packAfter }}
Busiest leg
{{ packPeak }}
{{ packPeakSub }}
{{ packNote }}
{{ ss.n }}
{{ sr.n }}
{{ sg.txt }}
the handover: one passenger gets off at Ramanagara, the next gets on
4 berths with nobody on them, the whole trip
Ready to sell as 4 normal tickets. Do this across the whole train and you get 33.
₹{{ cb.price }} · {{ cb.label }} · Coach {{ cb.id }}
{{ cb.summary }}
{{ bay.label }}
{{ s.no }}
{{ s.tipText }}
{{ s.no }}
{{ s.tipText }}
← TOWARDS ENGINE
{{ holdErrText }}
{{ pickSummary }}
{{ pickSub }}
STEP 3 OF 3

Review and confirm

Journey {{ cfTrainChip }} {{ cfWhen }}
{{ cfDep }} {{ fromName }} {{ cfFromMeri }}
{{ cfDur }}
{{ cfArr }} {{ toName }} {{ cfToMeri }}
{{ jrnRestHead }}
{{ j.t }}{{ j.v }}
{{ jrnPassNote }}
Your berths {{ cfHopBadge }} {{ cfPaxLine }}
{{ hm.t }}
{{ b.n }}
{{ b.title }} {{ b.note }}
{{ b.berth }} {{ b.type }}
{{ cfHopNote }}
Fare, part by part {{ cfClassLine }}
{{ p.cap }} {{ p.keep }}
{{ p.drop.t }}
{{ p.title }} {{ p.note }}
{{ f.label }} {{ f.value }}
{{ p.optTick }} {{ p.optText }}
{{ f.label }} {{ f.value }}
{{ p.sum.label }} {{ p.sum.value }}
{{ cfPackNote }}
{{ cfTotalLabel }} {{ cfTotal }}
{{ cfBlockLabel }} {{ cfBlockValue }}
{{ cfBlockNote }}
{{ cfWholeLabel }} {{ cfWhole }}
{{ travHead }}
{{ tv.label }}
{{ pp.n }}
{{ tv.dobLine }}
{{ tv.dlLabel }}
{{ nc.t }}
{{ dlPanelHead }}
{{ dlPanelSub }}
Consent request QR
Open it on this device instead
Cancel the request
{{ dlErrText }}
Add
{{ travNote }}
{{ cfLockLabel }} {{ holdTimer }}
{{ cfLockNote }}
Paying {{ cfTotal }}
How would you like to pay?
{{ pm.label }} {{ pm.hint }}
Scan the QR beside this panel with any UPI app, or pay from the phone you are holding.
Test card only · nothing is stored anywhere.
{{ pb.n }}
{{ wpHead }}
{{ wpBalLine }}
{{ wpBtnLabel }}
Enter your 6-digit wallet PIN
{{ wpErrText }}
Prototype PIN: 123456 · a wrong PIN pays nothing.
Payment QR
Scan with another phone to pay there. Simulated — no real money moves.
{{ payCaption }}
Where your money is
{{ ps.mark }}
{{ ps.title }}
{{ ps.sub }}
{{ payHolding }}
Money left your account, no ticket came back
It is with the payment gateway — not with khaali and not with Indian Railways. RBI’s rules give it T+5 days to auto-reverse; after that your bank owes you ₹100 a day, payable without you even asking.
Claim it back now →
Payment interrupted? App crashed, money debited?
Your berth stays locked for the full window — resume and you will never pay twice.
Resume booking
{{ resumeNote }}
{{ holdErrText }}
FROM {{ ticketDur }} TO
{{ fromCode }}
{{ fromName }}
{{ depTime }}
{{ dateShort }}
{{ ticketClass }}
{{ toCode }}
{{ toName }}
{{ arrTime }}
{{ dateShort }}
{{ k.label }}
{{ k.value }}
{{ ptDot }}
{{ ptHead }}
{{ ptSub }}
{{ l.t }}
{{ l.sub }}
{{ ptRule.linkText }}
The rule
{{ ptRule.rule }}
{{ ptRule.src }}
khaali
{{ ptRule.khaali }}
{{ chartText }}
Passenger
{{ p.name }}
{{ p.note }}
Berth
{{ p.berth }}
Type
{{ p.type }}
{{ lowRule.linkText }}
The rule
{{ lowRule.rule }}
{{ lowRule.src }}
khaali
{{ lowRule.khaali }}
Amount paid
₹{{ ticketTotal }}
{{ jnLabel }}
{{ jnBadge }}
Working out the walk and the next metro…
{{ jnLateText }}
{{ st.title }}
{{ st.chip }}
{{ st.sub }}
{{ st.note }}
{{ jnFare }}
{{ jnPassErr }}
{{ jnPassHead }}
{{ jnPassSub }}
{{ jnPassNote }}
{{ jnPassBlock }}
{{ jnPassBlockNote }}
Cancel this pass
{{ jnRideLabel }}
{{ jnRideSub }}
{{ jnRideErr }}
{{ jnRideHead }}
{{ jnRideLine }}
{{ jnRideNote }}
Cancel this ride
PNR
{{ pnr }}
{{ trainTitle }} · {{ quota }} quota. Show this to the coach attendant with a photo ID.
Where your train is now
{{ liveBadge }}
as of {{ liveNow }} · updating live · simulated
{{ approachLine }}
{{ s.name }}
{{ s.meta }}
{{ s.tag }}
Not a real ticket. No payment was taken, no reservation exists, and the running position is simulated from the published timetable.
Seat hop · the bargain route

Two half-empty berths. One cheap ticket.

Each colour is ONE berth: ride the green berth first, walk to the amber berth at the change station, ride it to the end. Same train, same fare — both berths lock and pay together as one ticket.
{{ hopJourney }}
Change
{{ c.k }}
{{ r.name }}
{{ r.no }} · dep {{ r.dep }}
{{ r.price }} {{ r.full }} {{ r.save }} {{ r.allIn }}
{{ r.boardName }} {{ r.boardTime }}
{{ r.endName }} {{ r.endTime }}
{{ s.pillText }}
{{ s.ordNo }}{{ s.head }}
{{ s.stretch }}
{{ r.directNote }}
No bargain hop beats the full fare on this pair right now.
Try a busier day, another class, or a longer journey — hops appear where partial berths overlap.
Seat check · before you book

Will I get a seat?

{{ oddsJourney }}
Change
Every train answers before you pay: a berth you can simply book, a seat made certain by one berth change, or your honest odds — nothing else.
Already waitlisted?
{{ oddsWlNote }}
{{ c.k }}
{{ r.name }}
{{ r.no }} · dep {{ r.dep }}
{{ r.badge }}
{{ r.head }}
{{ r.sub }}
{{ r.rac }}
{{ r.why }}
{{ r.say }}
{{ r.pct }}
{{ odds2LoadText }}
No running trains serve this pair on that date. Change stations or date.
How this works: every number is arithmetic on facts we can name — this train’s demand on that date, the day of the week, festival windows, cancelled parallel trains, how you join the queue (board at the origin and you are GNWL; mid-route is RLWL and clears about half as fast; Tatkal is TQWL), and RAC as its own outcome. No AI touches the number.
Fair Tatkal · a market-design demo

Take away the starting gun

Tatkal opens at 10:00:00 and the fastest click wins, so bots win — Railways says up to 80% of peak Tatkal traffic is non-human. khaali removes the race instead of policing it: bookings collect in a window, then everyone is allotted at once.
Live · what the customer sees
Kaveri Express
16021 · {{ tkDateLine }}
TATKAL
{{ tkDep }}
BWT
{{ tkArr }}
MYS
SL · {{ tkFare }}
{{ tkStatus }}
Confirmed
{{ tkWinHead }}
{{ tkWinSub }}
{{ tkMonthLine }}
khaali
SIMULATED
Tatkal · 16021 Kaveri Express · {{ tkDateLine }}
Where your money is
{{ st.mark }}
{{ st.title }}
{{ st.sub }}
{{ tkHolding }}
Your entry did not reach khaali — and your money never left
Your bank approved the block and khaali never heard about it. Because it was a block and not a debit, nothing was taken: an unmatched block lapses on its own. With a debit, this is the exact moment you would be holding a screenshot and a customer-care number, waiting on RBI’s T+5 days.
Amount to block · not debited
{{ tkFare }}
×
{{ m.label }} {{ m.hint }}
Payment QR
Scan with any UPI app
GPay · PhonePe · Paytm · BHIM · your app asks you to approve a block, not a payment
or type your UPI ID
Card number
Test card only · nothing is stored
Choose your bank
{{ b.n }}
{{ tkWalletLine }}
6-digit wallet PIN
Demo PIN 123456
{{ tkPayErr }}
{{ tkClockText }}
{{ tkDoneMark }}
{{ tkDoneHead }}
{{ tkDoneSub }}
Tatkal booking
×
Kaveri Express · 16021
{{ tkDateLine }} · {{ tkDep }} Bangarpet → {{ tkArr }} Mysuru · Sleeper
Passenger name · as on ID
Tatkal fare{{ tkFare }}
Blocked now to enter, not paid · taken only if you are allotted, released on its own if not
Backend · what the algorithm is doing
{{ f }}
Audit log · deterministic
{{ a }}
Sentinel · behavioural scoring
{{ tkSentHead }}
{{ r.who }} {{ r.band }} p {{ r.p }}
{{ r.head }}
{{ pp }}
{{ r.why }}
{{ tkSentFoot }}
In plain words
{{ tkSay }}
written by OpenAI from the audit above · it reads the numbers, it never decides them
How one Tatkal booking travels through the machine
10:00 · the window opens
15 minutes. Requests only collect — nothing is processed on arrival, so there is no race to win.
You book & block the fare
UPI · scan the QR on your phone · card · netbanking · wallet PIN. Your bank blocks ₹175 and debits nothing — the way an IPO application works. The block is what makes your entry real.
10:15 · the window closes
A booking at second 1 and a booking at minute 14 sit in the bowl as perfect equals.
Allotment runs once
Seeded and published — anyone can replay the draw and get the same 40 names. No discretion, no hidden priority.
✓ Allotted
Your berth is named — S4/60, Lower — and only now is the ₹175 taken: the block becomes the ticket. One tap prints the PNR. The bell rings to tell you.
✗ Not allotted
The block is released and ₹0 was debited — no refund, because nothing was taken. The bell rings to say so. Then the khaali part: the card shows the berths that need no window at all — book normally, or take the guaranteed seat-hop.
Meanwhile, in the bot lane
3 farms fire ~500 requests
In 40 milliseconds. Under the starting gun this won everything. Here, speed buys nothing.
Identity filter
500 requests trace back to 3 verified persons. Verification happened weeks ago, calmly — no OTP panic at 9:59.
Cap & fare
4 entries per person per month, each with money locked — 12 paid entries stand among ~150. The farm floats ₹2,100 a round to win a handful of berths. The business dies of arithmetic, not policing.
Why speed stops mattering
The agent shop’s only weapon was being first, and inside the bowl there is no first. Its {{ ftBots }} bot accounts collapse to a handful of chits because each verified person gets four a month — flooding the bowl needs warehouses of real, capped humans, and the business dies economically instead of being policed. Finance proved this cure on its own bot war: batch the window, clear it as one auction, break ties by lottery. Stock exchanges’ version had to discover a price each batch; Tatkal’s price is already printed on the fare table, so the bowl only has to decide who — a solved problem. The allocation you see here runs on the same engine that locks khaali’s berths: all-or-nothing, deterministic, auditable.
Simulated population, real mechanism. The 80% bot-traffic figure and 3.03 crore deactivated IDs are from Railways’ own statements; the batch-auction cure is the accepted market-design answer to speed races (Budish, Cramton & Shim 2015; IEX’s speed bump). This page is a policy demo — it books nothing.
khaali wallet · instant refunds

Your money, back in seconds

Available
{{ walletBalBig }}
{{ walletHeldLine }}
Booked twice by mistake?
We spot it and ask — one tap refunds the extra ticket here.
Train cancelled?
Full fare back instantly — or move the ticket to the next train.
Running 3+ hours late?
The 3-hour rule: cancel with a full refund — before you leave home.
Needs your attention
{{ c.kind }}
{{ c.title }}
{{ c.sub }}
All clear — nothing needs you. Refunds land here on their own.
Ledger
{{ t.note }}
{{ t.when }} {{ t.pnr }}
{{ t.amount }}
Nothing here yet.
Refunds from duplicates, cancellations and 3-hour delays land here — instantly, not in 5–7 bank days.
Double booking?
You just booked this journey twice
{{ dupWhat }} — same train, same day, same stations. If the site felt slow and you tapped twice, take the refund. If it’s for a friend, keep both.
{{ authTag }}
×
{{ authTitle }}
Your name
Phone
Email
Password
{{ authErr }}
{{ authDemoLabel }}
Demo account · filled in below
khaali@betterthanirctc.com
irctcsucks
Now press Sign in.
{{ authSwapText }}
Your password goes straight to Supabase — khaali never sees or stores it.
Traveller profile
×
{{ profTitle }}
{{ profEmail }}
Display name
Full name · as on ID
Date of birth · as on ID
{{ pDobLocked }}
Phone
Address
Document locker
{{ profAadStatus }}
{{ profLockerLine }}
{{ profLockerBtn }}
khaali never asks for an Aadhaar number. It asks the locker two questions — a date of birth, and whether a certificate giving lower-berth priority exists — and is told nothing else. Simulated stand-in, not DigiLocker.
{{ profErr }}
{{ profMsg }}
Watchlist

Favorites

Your starred trains \u00b7 the bell 🔔 warns you if any of them get cancelled in the next 7 days
{{ f.name }} \u00b7 {{ f.no }}
{{ f.route }}
{{ f.liveTxt }}
{{ f.alert }}
\u2605
No favourites yet.
Tap the \u2606 star on any train to watch it here \u2014 you\u2019ll get an alert if it\u2019s cancelled.
Account

Track

The train, the pass and the ride — in one place, while they are happening
Refresh
{{ trEmpty }}
{{ trLiveHead }}
{{ c.chip }}
{{ c.title }}
{{ c.sub }}
{{ c.status }}
{{ c.pBadge }}
{{ c.pLine }}
{{ s.name }}
{{ s.meta }}
{{ s.tag }}
{{ c.shTitle }}
{{ c.shSays }}
{{ c.olTitle }}
{{ o.t }}
{{ c.olFoot }}
{{ c.note }}
{{ trPastHead }}
{{ c.chip }}
{{ c.title }}
{{ c.sub }}
{{ c.status }}
{{ c.note }}
{{ trNote }}
Account

My bookings

{{ bookingsCount }} on this device · mock records
{{ t.label }}
{{ dupBanner }}
Journey orders · khaali picks the train
{{ o.route }}
{{ o.when }}
{{ o.line }}
{{ o.when2 }}
{{ o.badgeText }}
{{ o.warn }}
{{ o.ruleLinkText }}
The rule
{{ o.ruleText }}
{{ o.ruleSrc }}
khaali
{{ o.ruleKhaali }}
{{ b.train }}
{{ b.date }} · {{ b.cls }}
{{ b.statusText }}
PNR
{{ b.pnr }}
{{ b.ptDot }} {{ b.ptHead }} {{ b.ptBrief }}
{{ b.cxBand }}
{{ b.dlBand }}
{{ b.refNote }}
{{ b.fromCode }}
{{ b.fromName }}
{{ b.dep }}
{{ b.dur }}
{{ b.km }}
{{ b.toCode }}
{{ b.toName }}
{{ b.arr }}
{{ b.plat }}
{{ b.total }}
{{ b.paxCount }}
{{ b.pax }}
{{ b.note }}
Berths
{{ b.berths }}
Nothing here yet
Book a journey and it will show up on this page.
Mock records held in this page only. No payment was taken and no reservation exists. The two older entries are seeded so the page has something to show.
About this prototype

What is real, and what is not

A prototype is only useful if you know which parts are true.

Data
Where it came from
Status
{{ r.what }}
{{ r.src }}
{{ r.status }}
Limits
{{ l.h }}
{{ l.b }}
{{ modalEyebrow }}
Select class and quota
×
Class
{{ c.label }} {{ c.price }} {{ c.sub }}
{{ classNote }}
Quota
{{ q.label }}
{{ quotaNote }}
Passengers
Up to 6 per booking
{{ paxNum }}
+
{{ modalTripLine }}
See every boarding point for this train
×
Detect my location
Cities on this corridor
{{ c.glyph }}
{{ c.label }}
{{ c.meta }}
No station on this corridor matches that.
How many passengers?
{{ chosenSlotLabel }}
{{ chosenSlotDate }}
{{ chosenSlotTimes }}
{{ c.n }}
{{ t.label }}
₹{{ t.price }}
{{ t.status }}
{{ countNote }}
Get help
Close
{{ sosWhere }}
Record what is happening
Video and sound. It stays on this phone.
Take photos
Up to six, one tap each, all in one report. No sound, no flash.
Mark this moment
No camera at all. Nothing to see, nothing to explain - and khaali still records the train, the berth and the minute.
{{ sosGeoNote }}
{{ sosErrText }}
Your browser will show that the camera is on, and khaali cannot hide that from anybody watching your screen. If you cannot be seen holding the phone, mark the moment instead.
Earlier
{{ m.line }}
{{ m.sub }}
Send the recording to the RPF
{{ sosWaitText }}
{{ sosLiveHeadText }}
{{ sosLiveNote }}
Take photo
{{ sosShootDoneLabel }}
Stop
{{ sosDoneHead }}
What khaali has recorded
{{ sosStampLine }}
{{ sosHeldNote }}
{{ sosShotCapText }}
{{ sosSaveLabel }} See what the RPF can see
Sending the recording to the RPF...
Send the recording to the RPF
{{ sosRefText }}
Open WhatsApp
You decide what happens to it - now, or when you are somewhere safe.
Send to the RPF
{{ sosSubRpf }}
Send to someone I trust
{{ sosSubTrust }}
Keep it, tell nobody
Delete it
Done
{{ sosErrText }}