LokshinEats
Order food from your favourite township restaurants, spaza shops, and local food businesses.
Home-cooked food from cooks in your neighbourhood
CommerceTypeScript · CSSGitHub @PlumpSnupOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗HomeCook is a mobile-first marketplace where home cooks list their dishes and buyers order from them. Cooks are paid by cash, Interac e-Transfer or card (through Stripe).
Stack: Next.js 15 (App Router) + Tailwind CSS 4, Postgres on Neon, Auth.js (Google login), Vercel Blob (photos), Stripe Connect Express.
To rename the app, change src/lib/brand.ts. The brand colours are in src/app/globals.css. The city and cuisine lists cooks pick from are in src/lib/cities.ts and src/lib/cuisines.ts.
npm install
cp .env.example .env.local # set DATABASE_URL to any Postgres and AUTH_SECRET to random text
npm run dev
The app creates its tables the first time it connects, so there's no SQL to run. Without a Blob token, photos are saved in .uploads/ locally.
DATABASE_URL.BLOB_READ_WRITE_TOKEN.AUTH_SECRET: any long random text, for example from https://generate-secret.vercel.app/32NEXT_PUBLIC_SITE_URL: e.g. https://your-app.vercel.apphttps://<your-domain>/api/auth/callback/googleAUTH_GOOGLE_ID and AUTH_GOOGLE_SECRET.https://<your-domain>/api/stripe/webhook for checkout.session.completed and checkout.session.async_payment_succeeded.STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET.STRIPE_SECRET_KEY is empty, the app runs with cash and e-Transfer only.order_items) are saved on the server, which takes prices and availability from the database.PLATFORM_FEE_PERCENT if you set one. An unpaid card order is hidden from the cook until payment succeeds.Run these in the Neon SQL editor (Vercel → Storage → your database → Open in Neon):
select count(*) from profiles where is_cook; -- cooks (goal 50)
select count(*) from profiles where is_cook and exists
(select 1 from dishes d where d.cook_id = profiles.id); -- cooks with a listing
select count(*) from orders where status <> 'cancelled'
and (payment_method <> 'card' or paid); -- orders placed (goal 5)
Counting the 20 people who go through the app needs page analytics. One option is Vercel Web Analytics: turn it on in the Vercel dashboard and add @vercel/analytics.