Duleko 1.5: What the Finished Product Does
Duleko 1.5 shipped on 20 October 2026. This is the whole product as it stands: how people find each other, the three ways work gets agreed, who can see what, how fees and referrals work, the staff tools, and the numbers underneath, from 40 tables to 206 commits.
Duleko 1.5 went out on 20 October 2026, on Google Play (versionCode 9) and on duleko.com. The first commit was on 4 September, so this is about seven weeks and 206 commits of work, shipped as seven Android release builds from 1.0 to 1.5. I've written separate posts about single pieces of it: the map, phone numbers, ID checks, Android alerts. This one is the whole product in one place, as it stands in 1.5. Every number below comes from the code at the 1.5 release.
What Duleko is
Duleko is a local skills marketplace for Nepal, in English and Nepali. People who need work done find someone nearby with the skill, or post the job and let workers come to them. Both sides agree a price between themselves, and both rate each other afterwards. It started with Kapilvastu, it's built for phones first, and it runs on free plans.
There are no separate worker and employer accounts. Everyone has one profile: add a skill and you can be found as a worker, and anyone can hire anyone. Guests can browse skills, profiles, reviews and certificates without an account. The website and the Android app are the same React code, and Capacitor wraps it for Android.
Finding someone
The catalogue has 32 skills in three groups: 14 trades and local services (electrician, plumber, mason, driver, farm worker and so on), 11 professional services (tutor, IT, accountant, engineer, and since 1.5 a vet doctor), and 7 personal and everyday services (auto rickshaw, barber, delivery, child and elder care and others). Anyone can also write in a skill that isn't in the list. Home shows Popular and the three groups as four open cards, each with its four most popular skills and a See all.
Search runs in Postgres with trigram matching, so a typo like 'plumbr' still finds plumbers. Tapping a skill shows everyone with it anywhere in Nepal, nearest first: signed-in members get a distance in whole kilometres, and after that people are ordered by the same district, then the same province, then everyone else. Nobody is filtered out for being far away.
The map uses OpenStreetMap through Leaflet, with clustered pins. Nobody's live GPS is ever shared. Each person picks a work area once on a map, and that exact point is readable only by them. Signed-in members see the middle of its ~1 km square, or the exact spot if the person marked it as their shop or workshop. Guests only see how many people are in each ~5 km area.
Three ways to agree on work
People in Nepal agree work in different ways, so Duleko supports three, and all three end in the same place: a job and two reviews.
- A work request. Send a worker a request with a price, and go back and forth on it. Whoever didn't make the latest offer is the only one who can answer it, and accepting locks the price.
- The job board, with two kinds of post. A hiring post says "I need someone": up to 30 available workers with that skill in that district are alerted, they send offers with a price, and the poster picks one while the rest are declined. An offering post is an advert for your own skill, stays up for 30 days, takes no offers and alerts nobody. Each member can have 5 open posts and make 10 a day. Since 1.5 a price can be for the whole job or per hour, day, month, km, litre, kg, piece or square foot.
- A phone call. Many people would rather just call, so every tap on Call is recorded, and back in the app the caller is asked "Did you have a deal with <name>?": Yes, Still discussing (asked again in 2 days) or No. Coming back within 20 seconds counts as a mis-tap and is never asked about. A yes records the skill, an optional price (capped at Rs 5,00,000 so one silly number can't skew the totals) and a rating. The worker is asked to confirm it, and it counts after 7 days unless they say it didn't happen. No Duleko fee is ever charged on a call deal.
From accepted to done
A work request moves from pending to accepted, then confirmed, then completed, and a database trigger enforces every step: only the worker can accept and only the hirer can confirm. Confirming books the worker's day on their availability calendar.
1.5 changed the last step. A worker's "Mark as done" now only reports the job as finished, and the hirer gets a pop-up asking "Is the work finished?" with Yes, Not yet and Ask me later. Yes completes it, Not yet clears the report and tells the worker, and a hirer who never answers can't hold the worker up: three days after the report, an hourly pg_cron job completes it anyway. Older Android builds still send 'completed' straight away, and the same trigger turns that into a report, so they keep working.
After a job is completed, each side can leave one review, and a trigger keeps every profile's rating in line with its reviews.
Who can see what
Phone numbers live in their own table, away from the public profile, and one Postgres function, can_call(), decides who can read them. Each person picks "Who can call me" when they add their number: Everyone, After accepted work (the default) or Friends only. Accepted friends can always call. Chat is open to every signed-in member, but any message with a phone number in it is rejected, so the setting can't be bypassed in a chat.
Payment details, meaning a bank account at one of Nepal's 20 commercial and 16 development banks, or an eSewa or Khalti wallet, are visible only to the other side of a job and to people allowed to call the owner.
The verified badge comes only from an ID check. A member sends a photo of their citizenship certificate, national ID card, driving licence or passport. The photos sit in a private bucket that only the owner and staff can open, through links that expire after 10 minutes, and a staff approval is the only way a badge is given. Since 1.4, a verified name and age can't be edited any more. Every member also gets a permanent membership number in the form DLK-26AA0001 and a Professional ID card with a QR code. Members must be 18 or older.
Fees and referral codes
Duleko never holds or moves money. People pay each other directly, and Duleko charges workers a small monthly fee on completed jobs. The fee is marginal, like a tax bracket: 5% of the first Rs 5,000, 4% from Rs 5,000 to Rs 20,000, and 3% above that, so a Rs 10,000 job costs Rs 450. It applies to jobs requested from 1 Mangsir 2083 (17 November 2026), each worker's first 5 such jobs are free, and fees are billed per Nepali month and due by the 15th. A fee left unpaid past the 15th pauses accepting new requests until it's paid, while jobs already accepted carry on.
1.5 added referral codes. Every member gets a code made of four letters from their name and a number, like SANJ42 (names written in Nepali get DULE). When someone joins with a code, typed in while making their profile or filled in by an invite link, both people get one more free job. A code can be added up to 7 days after joining, only once, and never your own.
Chat, alerts and two languages
Chat is realtime and one to one, with replies, edits, reactions, typing dots and online status. In 1.5 it got faster: a thread opens straight away with the name and photo from the chat list, a sent message appears immediately with a clock and then a tick, and new messages, edits and read receipts are applied from Realtime instead of reloading the thread. The keyboard also stopped covering what you type on Android.
Alerts reach people four ways: in the app as they happen, by email through Brevo, by SMS for those who opt in, and in the Android notification bar. The phone alerts use no push service at all: a WorkManager job checks one Postgres function every 15 minutes and also sets the unread count on the app icon. Email is capped at 280 a day, inside Brevo's free 300, and in-app alerts always arrive.
Every screen is in English and Nepali, about 2,000 strings in all, and the type checker fails the build if one is missing. Dates show in Bikram Sambat by default, with AD as an option, and are always stored as AD. The alerts the database writes are stored in both languages too, and 1.5 polished the Nepali across every page and put district names in Nepali in job-post alerts.
The staff side
Staff come in three levels: moderator, admin and technical admin. They check IDs in a queue, handle reports, confirm fee payments, and post on a notice board that reaches every member. Admins can also suspend members. Since 1.5, staff can edit, take down or delete any hiring or service post, always with a reason that the poster receives as an alert, and every action is logged where only staff can read it.
An Activity page shows calls, accepted requests, jobs done, reviews, repeat customers, monthly active members, the money in completed deals and verified profiles, for all time and the last 30 days, and each number opens its own list. The website can show the same numbers rounded down ("120+"), but only after an admin switches them on. In 1.5 all of this moved into a Staff tab on the profile, with live counts of what's waiting.
Under the hood, by the numbers
Counted from the code at the 1.5 release:
- Frontend: React 19, TypeScript, Vite 6, Tailwind CSS v4, TanStack Router and TanStack Query.
- Backend: Supabase, meaning Postgres, Auth, Storage, Realtime and 2 Deno edge functions that drain the email and contact outboxes.
- Database: 40 tables, every one under Row Level Security, built up over 80 migrations, with 140 SQL functions and 54 triggers.
- Code: about 41,000 lines of TypeScript in 168 files, 11,000 lines of SQL, and four Java classes for Android: the main activity, two for phone alerts and one that saves ID cards to the gallery.
- Android: Capacitor 8, app id com.duleko.app, from Android 7.0 (SDK 24) up to target SDK 36.
- Website: 15 public pages prerendered as real HTML for search engines and link previews.
- Sign-in: a Nepali mobile number with a 6-digit PIN, email and password, or Google (in a Chrome Custom Tab on Android). Since 1.5 the phone can remember your number and name at sign-out, so signing back in is just the PIN, which is never saved.
- Running cost: free plans on Supabase, Vercel, Brevo and OpenStreetMap. The only paid part, SMS, is off unless configured.
Release by release
- 1.0 (19 and 20 September): the 1.0 release build, then a compact header and tab bar that fixed the overlap with Android's system bars.
- 1.1 (2 October): light and dark mode, a more compact app, redesigned profiles, faster photos and pages.
- 1.2 (3 October): phone alerts and an unread count on the app icon with no push service, membership IDs and the notice board.
- 1.3 (11 October): mobile number and PIN sign-in, Google sign-in that works inside the app, the job board and My Work, the map with private locations, payment details and Nepali dates.
- 1.4 (18 October): first-release feedback, with skills as four open cards, nearest-first search, the call setting asked when joining, hiring and offering posts, "Did you have a deal?" after a call, and verified names locked.
- 1.5 (20 October): the vet skill, the hirer confirming a job is done, remembered login, referral codes, prices per hour, day or km, full-screen profile photos, the Staff tab, faster chat and the keyboard kept out of the way.
What 1.5 still leaves out
A few things are deliberately not in 1.5:
- SMS codes. Sign-in has no SMS check yet, so sign-up refuses easy PINs like 123456 and relies on rate limits, and someone who forgets their PIN has to ask Duleko to reset it.
- Payments inside the app. Members list their bank, eSewa or Khalti accounts, but money moves directly between the two people and Duleko never holds it.
- Instant phone alerts. Without a push service, Android checks every 15 minutes, which is the shortest interval Android allows. Opening the app shows everything at once.
- Push alerts on the website, which still gets alerts in the page, by email and by opt-in SMS.
Frequently asked questions
- What is Duleko?
- Duleko is a bilingual (English and Nepali) local skills marketplace for Nepal, on the web at duleko.com and as an Android app on Google Play. People find skilled workers nearby or post a job, agree a price directly, and rate each other afterwards.
- Does Duleko charge a fee?
- Joining and browsing are free. Workers pay a monthly fee on completed jobs requested from 17 November 2026: 5% of the first Rs 5,000, 4% up to Rs 20,000 and 3% above, with the first 5 jobs free and one more free job for each referral. Deals made over a phone call are never charged.
- What changed in Duleko 1.5?
- Version 1.5, released on 20 October 2026, added a vet doctor skill, the hirer confirming a job is done, remembered login, referral codes, prices per hour, day or km on posts, full-screen profile photos, a Staff tab, faster chat, and a keyboard that no longer covers what you type.
Looking at 1.5 as a whole, most of what's in it came from watching people use 1.0. They wanted to call rather than message, so calls became a way to agree work. They posted adverts as if they were hiring, so the board got two kinds of post. They had no way to say a job wasn't finished, so the hirer now confirms it. The rules sit in Postgres rather than in the app, so each of those changes kept every older Android build working, and that's what let six versions go out in seven weeks.
