u/sharan_dev
-
1points
-
26points
My latest progress on my project (v.redd.it)
sharan_dev
sharan_dev
Been through this exact tradeoff building delivery software. The pattern that works, self host the map stack, buy the address autocomplete.
Tiles plus routing self hosted is genuinely solid now, OSM tiles with OSRM or Valhalla for routing gives you distance and ETA between two points for the cost of a VPS, and that's the part where SaaS pricing eats you alive per request as volume grows.
Autocomplete is the opposite. Photon or Nominatim self hosted will feel 80 percent right and the missing 20 percent is exactly the weird apartment suffixes and non UK formats mentioned above. A wrong address in a courier app means a failed pickup, which costs more than the API call ever will. So pay for autocomplete, cap it hard (debounce, min 3 chars, session tokens) so bots can't burn your monthly allowance, and keep everything after address selection on your own stack.
Email, agree with everyone, just use SaaS, self hosted SMTP deliverability is a hobby in itself.
For the bias disclosure, I work on a self hosted delivery platform (Enatega), we make this exact call on every deployment and the split above is where it's landed.
sharan_dev
Old thread but adding since people still land here searching for this. For a single takeout shop already on Square, honestly the boring answer is right, pick something from the Square marketplace that syncs your catalog and be done with it. The integration matters more than the feature list at that size.
Where it changes is if you grow into multiple locations or you're doing enough volume that fees start hurting. The comments about owning your own site and customer data are the right instinct. Once you're at 2 or 3 branches the math flips, you want the ordering system to be an asset you own instead of a monthly bill that scales against you. I work on Enatega so grain of salt, it's a self hosted delivery stack you buy once, source code included, customer app, rider app and admin, so nobody charges you per order and your customer data sits in your own database. Overkill for one shop, but if anyone reading this runs multi branch delivery and wants full ownership, that category exists and it's worth knowing about before you sign another SaaS contract.
sharan_dev
We build a white label delivery platform (Enatega) and learned the same lesson the slow way. Every client specific request has to become configuration or you're dead. Tenant level feature flags, theme tokens for branding, one schema with proper tenant isolation. The first time you give a client their own branch you've quietly signed up to maintain N products with one team.
Also agree with the on off switch comment. Probably half the "remove this feature" requests we get are really "hide this feature" requests, and a visibility toggle keeps everyone happy without touching the data model. The requests that genuinely can't be turned into config are usually your roadmap talking to you.
sharan_dev
Shipped something similar so a few notes.
Quote speed is fine on both DoorDash Drive and Uber Direct for cart display, but cache the quote with a short TTL and revalidate at checkout. Quotes expire and the fee can change between cart and payment, that was our biggest source of support tickets by a mile.
For the single PaymentIntent, the easiest pattern we found was adding the quoted delivery fee as a line item on a destination charge to the restaurant, then paying the courier out of the platform account when the delivery created webhook fires. Don't try to make the courier a party on the intent itself, none of them handle Connect cleanly.
Normalize courier webhooks into your own status enum from day one. Every provider names and orders events a bit differently and you will end up adding a second courier for coverage at some point.
Toast will take longer than everything else combined btw, start the partner application before you write any code.
Small disclosure, I work on Enatega, an open source white label delivery stack (customer app, rider app, dispatch, admin). If you don't feel like building the ordering and dispatch layer from scratch, forking something like that and wiring your courier API into it saves months. The frontend apps are open source so you can read the code first and decide if it's any good.
sharan_dev
Hard truth but free is exactly what just failed you. GloriaFood was free because Oracle was subsidizing it and now everyone on it is migrating on a deadline. Whatever you pick next, assume free means it can disappear.
Also since you're in a country GloriaFood doesn't even support, check payment gateways before you compare features at all. If the platform can't settle payments in your country nothing else about it matters, and VPN workarounds are what break payments and notifications later, which you already ran into.
So realistically two options. Another free or cheap SaaS, fine for now, just export your data every month or two so the next shutdown doesn't hurt as much. Or pay once and own the software. I work on Enatega so grain of salt, but the whole idea is one time payment, you get the source code, host it yourself, and plug in whatever local gateway actually works in your country. Overkill if all you need is a QR menu, but you said you want ordering and payments on your own site, and if you own the stack you never do this migration again.
sharan_dev
Good writeup. The part nobody talks about is the import side though. Few things worth checking before committing to a new platform, from having done a few of these.
Ask them to run a test import with your actual export file, not their demo data. The GloriaFood CSV has quirks around modifiers and delivery zones that break importers that were never tested against it.
Check whether order history actually attaches to customer profiles or you just get a flat email list. Almost everyone can import emails. Very few keep the who ordered what part, and that's the data that makes loyalty or remarketing worth anything.
And ask where your data lives afterwards. If it sits in the vendor's database you're one acquisition away from doing this exact panic export again. I work on Enatega so I'm biased, but this is why we went self hosted, your customer and order data sits in your own database and this whole category of problem just goes away.
sharan_dev
I am using Close CRM but the CRM is not relevant as the system built around it. For example in my case I have automated personalised follow ups with sequence and relevant time zone that has significantly improved my no show percentage as well as close percentage.
sharan_dev
Lead with the after-hours leads, that's the only number here that's already money to him. Response time is your metric, not his. "The system caught 3 jobs after 11pm you'd have missed" is a sentence he can turn into dollars in his head instantly.
Also, an unresponsive owner is not a bad sign in this niche. He's on jobs all day, that's exactly why your system has value. Stop asking for feedback, he has none to give and every unanswered question makes the relationship feel like work. Send one short message near the end: here's what it caught this month, if one of those turned into a job it paid for itself, it stays on for $X/month and you can cancel whenever. Make continuing the default and the decision small. The trial ending, and the thing switching off, is your deadline and his loss aversion, you don't need to add pressure beyond that.
sharan_dev
Your third channel is the one that works, you just stopped one step short. Being useful in a niche gets replies but it converts when the same people see you repeatedly in the same place. One community, same narrow topic, weeks of answers. Then when someone you've already helped mentions the problem your thing solves, the DM isn't cold anymore.
22 silences from cold outreach to local businesses is also pretty normal, for what it's worth. Local owners buy from referrals and from people they've seen twice. If you want that channel to work, one warm intro from an existing contact beats the next 50 cold emails.
sharan_dev
Scoping and support, in that order. AI collapsed my build time but it did nothing for the conversations around the build. Clients still need discovery, still change their mind after seeing v1, still send the "one quick thing" message a month after delivery. That stuff was always the real cost and now it's most of the cost.
Also worth saying, faster building makes it cheaper to build the wrong thing. I catch myself skipping validation because starting is so frictionless now. The bottleneck that's left is deciding what deserves to exist, and no tool in the stack helps with that one.
sharan_dev
Matches my experience on the services side. First clients came from people who already knew my work, and the ones after that came from showing up in the same narrow niche over and over until my name meant something there. I was helpful all over the place for months and it did nothing. Got specific and repetitive and people started recognizing me. Broad helpfulness is invisible, narrow helpfulness compounds.
The other underrated part of the boring grind, every one of those 340 personal messages teaches you the exact words customers use to describe the problem. That vocabulary ends up in your landing page and your pitch, and that's when things slowly stop feeling like screaming into a void.
sharan_dev
Matches what I've seen. The follow-up question that made pricing click for me: not how much value to give away, but at what moment the user has something to lose. Free users who've built up state, saved work, history, whatever, convert at the point where that state is at risk. The paywall lands softer when it's protecting something they already own instead of promising something they haven't seen.
Practically it's just an anonymous account that quietly accumulates their work, and the upgrade ask shows up when leaving would cost them. Ran a copy test on that once, naming the specific things they'd lose beat generic benefits copy by a wide margin.
sharan_dev
Low competition niches are the SEO cheat code, nice work. Two things to do while it's working.
Go to Bing Webmaster Tools and import your site straight from Search Console, takes five minutes. Bing indexes new pages way faster than Google and its index feeds ChatGPT browsing and a few other assistants, which matters a lot for an obscure-facts database like yours since that's exactly what people ask AI about.
And set up IndexNow while you're in there so your tens of thousands of pages get picked up on change instead of on crawl. With a database site that's the difference between weeks and hours.
sharan_dev
Agree with this and I'd add the unglamorous half nobody reads books about, which is follow up. Most of my closed deals as an agency didn't happen on the call where I pitched. They happened on touch 4 or 5, weeks later, when the prospect's situation changed and I was the one who'd stayed in sight without being annoying.
"We'll get back to you" mostly means "not a priority right now," not no. Log it, set a reminder, come back in 3 weeks with something useful rather than a checking-in message. A boring CRM habit converted more of those stalled deals for me than any closing technique did.
sharan_dev
Went through the same thing selling services instead of a product. My pitch used to be the feature list plus save time and money, and it attracted exactly nobody worth working with. Switched to leading with the one outcome the client actually wakes up worrying about and suddenly the calls got shorter and the close rate went up.
The uncomfortable part is that the better framing usually means naming one problem and walking past the other six things you built. Feels like leaving value on the table. It isn't. The other features get discovered after they're already in, and by then they read as bonuses instead of noise.
sharan_dev
Yes you can check it over here https://enatega.com
sharan_dev
Thank you makes sense
sharan_dev
This was the answer that I really needed man makes so much sense
sharan_dev
Mostly Javascript with frameworks React Native, Expo, GraphQL, NextJS and Express
sharan_dev
For tracking we are using clarity and Amplitude for analytics
sharan_dev
Link to Github: https://github.com/enatega/food-delivery-multivendor
sharan_dev
Alright will check it out
Fair point honestly. I'm from the Enatega team so obviously biased, but you're right, a solo owner operator who just wants what GloriaFood did is better off with UpMenu or something in that category. Set it up in an afternoon and forget about it. Where we make sense is a different crowd, agencies and resellers who were building on GloriaFood, or people running multiple locations. If you rent another SaaS you're basically waiting for the next shutdown email. If you own the code and host it yourself nobody can pull the plug on you.
And yeah the pricing criticism is fair, it should be visible without signing up and I've passed that on internally. It's a one time payment for the source code rather than a monthly fee which is partly why it doesn't fit the usual SaaS pricing page format, but that's a reason, not an excuse.