Launch faster with production-ready code • Instant delivery after checkout
GeekBase

Friendship – Social Network Meetup App With Laravel and Flutter

Quality reviewed Recently updated Digital product

Product details

APK DEMO https://drive.google.com/file/d/1q4F2ZBDkeY5YSmiXj6n5Bur0Ok_RtIo_/view?usp=sharing

Friendship — White-Label Social Network + Real-World Meetups (Laravel + Flutter)

Friendship is a fully self-hosted, white-label social platform for communities that meet in real life. People post, chat, follow friends, drop plans on a map, buy tickets, go live, send gifts, and get paid as hosts — on the web and in one Flutter app for iOS, Android, and PWA. You own the brand, the data, and the revenue. No per-user SaaS fee. No third-party AI API required.

The package is a complete ecosystem: a Laravel 13 backend (marketing site, admin, REST API, web installer), a logged-in web app, and a Flutter 3 client that talks to the same API. Install once. Run website, admin, iPhone, Android, and /app from one platform.

What’s Included

  1. Laravel 13 backend (PHP 8.3+) — REST API (Sanctum), MySQL, queued jobs, Laravel Reverb realtime, scheduled tasks, Stripe/PayPal/Paystack/Flutterwave checkout, Stripe Connect host payouts, Agora live tokens, FCM push, and Admin settings that power web + mobile
  2. Flutter app (iOS + Android + Web) — one codebase: feed, stories, reels, map meetups, chat, calls, live rooms, wallet, Apple IAP, Stripe Payment Sheet, deep links, and PWA at /app
  3. Admin panel — users, content, meetups, orders, live rooms, reports, gifts, coins, subscriptions, push, ads, onboarding, legal, and every API key
  4. Marketing website — homepage, features, meetups, safety, premium, communities, contact, privacy, terms, public share pages, download QR
  5. Logged-in web app — feed, meet, inbox, live, wallet, people, communities, and settings in the browser (same accounts as the phone app)
  6. Web installer — requirements check, database, migrations, optional demo seed, admin account, then lock file at /install
  7. English HTML documentation — VPS, installer, Stripe, Agora, Maps, Firebase, queue/Reverb/cron, Flutter keys, admin tour, go-live, troubleshooting

What You Do After Purchase (buyer checklist)

  1. Unzip. Open Documentation/index.html (no purchase key).
  2. Put the Laravel project on a VPS (not typical shared hosting). Point the domain document root at public/.
  3. Visit https://yourdomain.com/install. Enter app name, HTTPS URL, MySQL, and your admin login. Optionally seed demo users.
  4. Sign in at /admin. Set logo, colors, support email, Terms, and Privacy.
  5. Create accounts at Stripe, Agora, Google Maps, Firebase, and your SMTP host. Paste keys in Admin → Settings (see Payments and APIs below). Test in sandbox first.
  6. Keep queue, Reverb, and cron running (Supervisor). Without them, tickets, email, chat, and reminders stall.
  7. Build Flutter with --dart-define=API_BASE_URL=https://yourdomain.com. Replace Maps / Firebase placeholders, bundle ID, and deep-link domain before store upload. Copy flutter build web into public/app/ for the PWA.

Flutter Mobile + Web App

One codebase. Same users, wallet, and content as the Laravel site.

  1. Social — feed, multi-photo carousels, nested comments, likes, saves, hashtags, explore, stories, highlights, reels / duet, sounds, photo tags, pin a post, restrict, hide like counts
  2. People — follow (default) or friend-request mode, profiles, @username, QR, waves nearby, verification requests
  3. Meetups — map + list, create a plan, RSVP, paid tickets, co-hosts, invites, who’s going, reminders, share pages, iCal
  4. Chat — DMs, groups, broadcast channels, reply, reactions, view-once photos, voice notes, gifts, mute, message privacy
  5. Live & calls — Agora live rooms (comments, gifts) and 1:1 voice/video when Agora is enabled
  6. Wallet — credits, coin packages, catalog gifts, host payouts, optional gift cash-out (keep off on iOS if it conflicts with Apple 1.1.4)
  7. White-label — app name, logo, and colors come from GET /api/config. No rebuild for branding. Languages: English, Spanish, Arabic (RTL)
  8. Sugar dating — optional tab, OFF by default. Enable only in Admin and with --dart-define=SUGAR_ENABLED=true. Keep off for most App Store listings

User Roles

  1. Admin — full control at /admin
  2. Member — web + Flutter: post, chat, join meetups, wallet, live
  3. Host — create meetups, sell tickets, Stripe Connect payouts (when enabled)
  4. Public visitor — marketing pages and share links (/p /u /m /c /h)

Admin Panel

  1. Dashboard KPIs
  2. Users — create, ban, verify, promote admin, credit coins, freeze
  3. Posts, stories, music/sounds, chats, meetup plans, ticket orders
  4. Live rooms (force-end), reports, ID verifications
  5. Gifts catalog, coin packages, levels, redeem gateways, withdrawals
  6. Subscription plans + sync to Stripe
  7. Push broadcast, announcements, events, onboarding slides
  8. In-app ads / promotions, help articles, media health, system health
  9. Settings groups: General, Website, Features, Subscriptions, Email, SMS, Payments, Economy, Languages, Sugar, Agora, OAuth, Maps, Media, Legal, System

Marketing Website + Web App

  1. Public: home, features, meetups, social, safety, premium, communities, contact, privacy, terms
  2. Auth: login, register, 2FA, demo login (if seeded)
  3. Signed-in /account: feed, meet map, inbox, live, wallet, people, communities, saved, settings
  4. Flutter PWA at /app after you copy the web build

Payments — what you must do (Stripe and the rest)

Friendship does not process cards by itself. You open merchant accounts, paste keys in Admin → Settings → Payments, and pay the gateway’s fees. Start in test / sandbox. Switch to live keys only when a test ticket and webhook both succeed.

Stripe (recommended) — cards, wallet top-ups, subscriptions, meetup tickets, Stripe Connect host payouts.

  1. Create a Stripe account at stripe.com and complete business verification when you go live.
  2. Developers → API keys. Copy Publishable and Secret (test keys first: pk_test_ / sk_test_).
  3. Admin → Settings → Payments. Set default gateway to Stripe. Paste both keys. Currency (e.g. USD).
  4. Developers → Webhooks → Add endpoint: https://yourdomain.com/stripe/webhook (use your real domain). Events should include payment success / checkout / Connect as listed in the HTML docs. Copy the webhook signing secret (whsec_) into Admin.
  5. If hosts should get paid: enable Stripe Connect in Admin and have hosts finish Connect onboarding from the wallet. Platform and Connect fees are Stripe’s, not this item’s.
  6. Apple: digital goods (Plus / VIP / coins) on the iOS app must use Apple In-App Purchase. Configure IAP products in App Store Connect and Apple keys in Laravel .env. Real-world meetup tickets can still use Stripe.
  7. Flutter uses Stripe Payment Sheet with the publishable key from /api/config. After you change keys, reload the app. Do not ship live secret keys in the Flutter project.

Optional gateways — set the default gateway in Admin, or use them as extra checkout paths:

  1. PayPal — Client ID + Secret. Buyers return to your site after PayPal checkout. Webhooks/return URLs as in the docs.
  2. Paystack — public + secret key. Common for African cards and local methods. Paste callback URL Paystack gives you.
  3. Flutterwave — public + secret key. Same idea: create account, paste keys, test, then live.

⚠ Third-party payment fees — important disclosure

Each gateway needs its own merchant account. Fees are charged by that company, not by this script. Amounts change; check the provider:

  1. Stripe — typically a % + fixed fee per charge, plus Connect fees if you pay hosts — stripe.com/pricing
  2. PayPal — % + fixed fee — paypal.com/fees
  3. Paystack — local / international rates — paystack.com/pricing
  4. Flutterwave — country-based rates — flutterwave.com/pricing
  5. Apple / Google — store commission on IAP digital goods

Other APIs you paste in Admin (what each is for)

  1. Agora — live rooms and voice/video calls. Create an Agora project, copy App ID + Certificate into Admin → Agora, enable the live feature. Usage is billed by Agora after the free minutes. HTTPS required for camera.
  2. Google Maps — meetup map, pins, places. Enable Maps SDK / Places on Google Cloud, enable billing, restrict the key. Paste in Admin → Maps. On Flutter, also replace YOUR_GOOGLE_MAPS_API_KEY in AndroidManifest and iOS AppDelegate. Web maps load Maps JavaScript from Google when the key is set (Google Maps TOS).
  3. Firebase Cloud Messaging — push (“someone liked your post”). Create a Firebase project, download google-services.json and GoogleService-Info.plist, run flutterfire configure, replace the placeholder files. Until you do, the app still runs; push is skipped. Usually free at normal volume.
  4. Google / Apple Sign-In — optional. OAuth client IDs in Admin → OAuth. Configure the same bundle ID / SHA-1 in Google Cloud and Apple.
  5. Email (SMTP) — password reset and admin mail. Hostinger, Mailgun, SES, etc. Host, port (465 SSL or 587 TLS), username, password, from address in Admin → Email.
  6. SMS — optional Twilio or Vonage for codes. Paste SID/token or key/secret in Admin → SMS.
  7. Media storage — default is local disk + php artisan storage:link. For scale: DigitalOcean Spaces, Cloudflare R2, S3, Wasabi, Backblaze, or custom S3. Presets and a test-upload button are in Admin → Media.

Google Maps JavaScript and Stripe.js load from Google/Stripe when you turn those features on. That is required by those vendors (Maps TOS / PCI). This item’s own CSS, fonts, Chart.js, Flatpickr, and Agora Web SDK are bundled locally — no product CDNs.

Server, queue, Reverb, cron

  1. VPS required — Ubuntu 22.04/24.04, 2 GB RAM minimum (4 GB better), Nginx or Apache, PHP 8.3 extensions (pdo_mysql, gd, curl, mbstring, xml, fileinfo, …), MySQL 8, Composer, ffmpeg (reels), Supervisor, Certbot HTTPS
  2. php artisan queue:work — webhooks, mail, jobs
  3. php artisan reverb:start — live chat / presence
  4. Cron every minute: php artisan schedule:run — story expiry, meetup reminders, host payouts

Shared hosting that cannot run workers or WebSockets is not supported.

Flutter store build (what you replace)

  1. YOUR_GOOGLE_MAPS_API_KEY — Android + iOS
  2. Firebase placeholder files — google-services.json, GoogleService-Info.plist, lib/firebase_options.dart
  3. Bundle ID default com.friendship.friendship — change to yours
  4. Deep links / Associated Domains — replace your-domain.com
  5. Always pass API_BASE_URL. Android release still uses the debug keystore until you add a Play signing keystore

Feature switches (Admin, no code)

Reels, story music, Agora live, in-app ads, follow vs friends graph, word filter, sugar dating, subscription gates (who can host, call, see distance, daily waves), gift cash-out, post monetization per impression.

Safety, legal, i18n

  1. Reports, bans, word filter, optional TOTP 2FA, help center you write in Admin
  2. Sample Terms and Privacy in Admin → Legal — replace with your company, domain, and support email before launch
  3. GDPR-style export / account delete
  4. en / es / ar (RTL) in the Flutter client

Tech Stack

  1. Backend: Laravel 13, PHP 8.3+, MySQL 8, Sanctum, Reverb, queues, Stripe PHP
  2. Web: Blade, compiled Tailwind (local CSS), Chart.js, Flatpickr, Agora Web SDK (local)
  3. Mobile / PWA: Flutter 3, Dart 3, Dio, Stripe, Agora, Google Maps, Firebase Messaging, in_app_purchase, Reverb/Pusher client

Files Included

  1. Laravel source (PHP, Blade, CSS, JS), installer, migrations, seeders
  2. Flutter source (Dart) — iOS, Android, web
  3. HTML documentation, licensing.txt, credits.txt, changelog.txt
  4. Original demo graphics (not Unsplash/Pexels stock)

Not in the ZIP (on purpose): .env, vendor/, node_modules/, Flutter build/, ios/Pods/, live API keys, keystores. Buyers run composer install, npm install, flutter pub get, pod install.

Browser & Device Support

Web: latest Chrome, Safari, Firefox, Edge (HTTPS). Flutter: Android 8.0+ (API 23), iOS 15+, Flutter web PWA. Server: Linux VPS, PHP 8.3+, MySQL, ffmpeg recommended, cron + Supervisor.

Demo

Live preview: friendship.okao.site · Flutter web: /app/ · Admin: /admin

After optional seeder: admin [email protected] / password · app [email protected] / password. Prefer the admin you create in the installer for production.