I have a KTC credit card with thousands of reward points. I know I can redeem them at restaurants for discounts and free meals. The problem? KTC has 846 dining promotions. I'm not scrolling through all of them while standing hungry in a mall. So I built an app that does it for me in seconds.
The Problem Nobody Talks About
Credit card reward points are one of those things that sound great in theory. "You've earned 3,271 points! Redeem them for exclusive dining privileges!" But in practice, using them is a nightmare.
Every time I walked into a mall, the same thing happened: I'd open the KTC app, tap on "Promotions," and see an endless wall of deals. Sizzler, McDonald's, Shabushi, MK Buffet, some cafe I've never heard of — hundreds of them. Each one requires different point amounts. Some I can afford, some I can't. And I have no idea which restaurants are actually near me right now.
So I'd give up, put my phone away, and eat somewhere without using any points. Every single time.
What I Built
I built Pointer — a personal web app that solves this in one tap. Here's how it works:
- I open Pointer on my phone (it's a web app, no install needed)
- GPS locks my location automatically — or I can search a place like "Central Rama 2"
- Google Places API finds every restaurant within 1 kilometer
- Pointer matches those restaurant names against my database of KTC promotions
- It filters out any deal I can't afford with my current points
- Shows the results sorted by lowest points first — best value on top
So now when I walk into CentralWorld at lunch, I open Pointer and instantly see: Swensen's (899 pts for a 100-baht coupon), Shabushi (699 pts for 120 baht off), McDonald's (219 pts for a meal set). I pick one, open the KTC app, redeem, done.
The Fun Part: Reverse-Engineering KTC's API
The biggest challenge wasn't building the app — it was getting the data. KTC's website shows 846 dining promotions but only displays 32 at a time. Their pagination is broken. You can click "next page" all day and keep seeing the same 32 results.
So I dug into their website's network traffic using Playwright (a headless browser tool) and found their internal API. It's a simple paginated endpoint that returns promotion data in JSON. Once I had that, I wrote a scraper that:
- Pulls all 846 promotions through the API (27 pages of 32 items each)
- Filters to only promotions that involve redeeming points (about 295 of them)
- Visits each promotion's detail page to extract the exact point cost and what you get
- Saves everything to a local database
This scraper runs automatically every Monday at 4am via a cron job. I never have to think about keeping the data fresh.
The Result: 199 Restaurants with Exact Point Costs
After scraping, I ended up with 199 unique restaurants where I can redeem KTC points. Each one has the exact number of points needed and what I get in return. Some highlights:
- Kyo Roll En — 179 pts for a 50-baht coupon (cheapest deal!)
- McDonald's — 219 pts for a meal set worth 99 baht
- Café Amazon — 359 pts for a 40-baht coupon
- Shabushi, Sukishi, Sushi Hiro — 699 pts for buffet discounts
- Swensen's — 899 pts for a 100-baht coupon
- MK Buffet — 1,299 pts for 50% off
- Sizzler — 2,499 pts for a 400-baht coupon
Tech Stack
I kept it simple because this is a personal tool, not a product:
- Backend: FastAPI (Python) — lightweight, fast
- Database: SQLite — 68KB file, stores everything
- Frontend: Single HTML file with vanilla JavaScript — no build tools, no frameworks
- Map: Leaflet + OpenStreetMap tiles — free
- Location: Google Places API (Nearby Search) — free tier of 5,000 requests/month, I use maybe 100
- Hosting: My own server — $0 extra cost
Total monthly cost: $0. Everything either uses free tiers or runs on infrastructure I already have.
Why I Build Personal Tools
This is a tool that only I use. It solves a problem only I have (well, probably millions of people have it, but I'm not trying to build a startup here). It took one afternoon to build the first version, and a few more hours to get the scraper working properly.
This is the same approach I used when I automated my credit card bill categorization. Instead of spending hours on a repetitive task, I spend a few hours building a tool that eliminates it forever. The ROI compounds every time I use it.
The best part is that with AI handling the coding, building personal tools like this is faster than ever. I described what I wanted, my AI agent built it, and I just guided the decisions. The entire app — backend, frontend, scraper, deployment — was done in one session.
What's the small daily annoyance you'd build an app for if you could?
Pointer exists because I had an itch and an AI agent with server access. That's it. No product roadmap, no market research — just "this annoys me, let's fix it." If you have a problem like that, Jarvis lets you build personal tools the same way. Your agent, your server, your weird niche problem solved in an afternoon.
— Pond
