SaifBrand

Restaurant Ordering Platform — A Laravel Build With No Third-Party Services

A complete restaurant website and back office, built to a brief that ruled out hosted services, build tools and terminal access on the server. Online ordering, courier dispatch, three payment processors and a page builder — all installable by uploading files and answering four questions in a browser.

🤝 Where this stands — built for a Freelancer.com contest and shortlisted past the first round of rejections. The client eventually went a different way, so this is not an active engagement. The demo is a static copy of the real Laravel application, kept online as a skills showcase: every page is genuine rendered output, though ordering and the admin panel need the database behind them to actually run.

📋 The Brief

A Brief With Four Hard Constraints

No third-party providers or hosted services of any kind. No server modules to install. No terminal, ever — anything that would normally be an artisan command had to become a button in the admin. And nothing hard coded, so every page, price, colour and setting had to be editable by the owner. Those four rules decided the entire architecture: fonts are self-hosted files rather than a CDN, there is no npm or build step at all, payment and courier calls go straight to REST APIs instead of SDK packages, and the vendor folder ships inside the download so the server never needs composer.

📱 See It In Action

Real Screens, Not Mockups

Restaurant homepage with hero, feature strip and category tiles
Admin dashboard showing takings, open orders, bookings and best sellers
Admin tools screen replacing every job that would normally need SSH
Menu page grouped by category with dish cards, ratings and prices
Dish page with required cook temperature and optional paid extras
Page builder with draggable, editable content sections
Payment settings for Stripe, Square, a merchant account and cash
What Was Built

What the Build Actually Does

🛒

Ordering, End to End

Menu with time-limited categories, dish options priced live as they are picked, basket, delivery-zone check by ZIP, promo codes, tips, scheduling, card payment, confirmation and a guest tracking page that needs no account. Orders land on a kitchen board with a printable ticket, status control and refunds.

💳

Three Processors, One Checkout

Stripe, Square and a direct merchant account speaking either the Authorize.Net JSON API or NMI Direct Post. The owner ticks the ones they hold, pastes the credentials and it works. Each is a class behind one interface, so checkout never knows which is live and adding a fourth is one file.

🛵

DoorDash, Uber Eats and Grubhub

Two modes, switchable: keep the order on the site and request a courier over the provider API once it is paid, or hand the guest over to the marketplace listing. DoorDash's signed JWT is built by hand rather than pulling in a package.

🧱

Nothing Hard Coded

Pages are assembled from twenty section types the owner adds, reorders, hides or deletes. Any page links into any menu in two clicks. Prices, tax rates per food and alcohol, delivery zones, fees, opening hours, colours, logo, favicon and per-page SEO with social images are all editable.

⚙️

An Installer Instead of a Terminal

Upload the files, create an empty MySQL database, open the site and answer four screens. The wizard checks the server first, writes the environment file and creates every table. Migrations, cache clearing, sitemap rebuilds, database backups and health checks are all buttons in the admin afterwards.

🔒

Self-Contained by Design

No CDN, no web fonts, no analytics and no external stylesheet or script. The only outbound request the site ever makes is to a payment or courier API the owner switched on. Hand-written CSS and JavaScript served as they are, so the owner can edit them with a file manager.

Laravel 13 · PHP 8.3 · MySQL · 43 tables · 33 models · 19 admin controllers · no build step

Like What You See?

Need a Restaurant Site That Actually Takes Orders?

Ordering, delivery integrations and a back office your staff can run without a developer.