Grevent
A professional networking platform where people and companies share updates, build rich profiles, message in real time and sell gated content, the social graph, the commerce and the payouts in one system.
Visit grevent.keynou.com





Recorded on the running application, register, follow a company to unlock the feed, browse profile modules, open chat and analytics. Real interface, real API.
The problem
Professional networking tools stop at the connection: a feed, maybe a message. Companies can't publish to followers, creators can't charge for content, and nobody sees what their posts actually did. Stitching feeds, chat, payments and moderation together is months of plumbing before the product is even interesting.
What we built
A full social platform built as one system: a follow-gated onboarding that seeds every feed, company and personal profiles with media/music/link modules, real-time chat with message requests, paid posts settled through Stripe Connect, creator analytics and a moderation pipeline, wrapped as an installable PWA.
The result
A working platform with ~94 API routes across 13 Django domains, feed, chat over WebSockets, followers, friendships, payouts, subscriptions, analytics, notifications, help center, newsletter and a Shopify bridge, behind a Vite/React client with Redux state and an offline-capable shell.
The product journey
Join as person or company
Registration splits into individual and company accounts, with Google OAuth alongside email/password, so the graph models businesses and people differently from day one.
Follow to unlock
New users can't hit an empty feed: onboarding gates the product behind following at least one company, so every first session already has content in it.
Build a living profile
Profiles aren't a photo and a headline. They're module cards for media, music, TikTok, YouTube and links, plus a public Grevent Link and QR code for sharing offline.
Post, react, discuss
The feed supports likes, comments, shares and favorites with real counters; posts can be gated and sold, with purchases tracked in a Purchased Posts library.
Message in real time
Chat runs over WebSockets with a Chats/Requests split, strangers land in Requests first, plus live online presence and unread badges.
Measure and monetize
Creators get reach/likes/comments/shares/favourites analytics on a 10-minute refresh, Stripe Connect payouts for paid posts, and subscription options in settings.
Best features
Follow-gated onboarding
Instead of dropping new users into a dead feed, the app requires following at least one company, searched live from the directory, before the product unlocks. Every account starts with a populated timeline.
Rich profile modules
Profiles compose from cards, Overview, Media, Music, TikTok, YouTube, Links, Shared, turning a bio into a link-in-bio hub. Each user gets a public Grevent Link URL plus a downloadable QR code.
Feed with real interaction
Post cards carry like/comment/share/favorite actions, per-person counters, comment threads and media attachments, backed by the posts domain, not a mock feed.
Real-time chat with consent
Messaging runs on Django Channels WebSockets: a per-room channel for conversation plus a per-user updates channel for inbox pushes. New contacts land in a Requests tab until accepted, and online presence is tracked in Redis.
Paid posts & payouts
Posts can be paywalled: purchase links, Stripe checkout, refunds, and creator earnings settled through Stripe Connect, connect, verify, and remove a payout account from settings.
Creator analytics
A dedicated dashboard tracks reach, likes, comments, shares and favourites over selectable windows, refreshed by a scheduled job, the same numbers the marketing pages demo.
Moderation pipeline
Content flows through automated moderation, profanity screening plus AI checks, with a dedicated moderation app and media moderation logs.
Built like a product, not a page
Dark mode, QR scanner, Suggest-an-Idea and Report-a-Bug feedback loops, help center, newsletter, team management, Shopify bridge and PWA installability.
The product, animated
A live, code-rendered tour of the core loop, post, like, follow-gate, chat, analytics, no video bytes, sharp at any size.
How it's put together
Client
Vite + React 18 SPA, React Router, Redux Toolkit store, MUI design system with a custom theme, Tailwind utilities, Stripe.js, Chart.js dashboards and vite-plugin-pwa for installability and offline shell.
Realtime
Django Channels behind Daphne: a per-room consumer for conversation and a per-user updates consumer for inbox pushes. Presence lives in a Redis hash (chat_online_counts) incremented on connect, decremented on disconnect.
API
Django 5 + DRF with SimpleJWT bearer tokens, ~94 routes across 13 domain apps: auth, posts, followers, friendships, chat, notifications, analytics, subscriptions, payouts, team, help-center, newsletter and a Shopify integration. Swagger docs served at /docs/.
Data & jobs
Relational core for the social graph with MongoDB alongside, Redis for cache/presence/channels, S3-backed media, Celery + beat for periodic jobs (the analytics pipeline refreshes every 10 minutes), and a moderation pipeline screening content.
How we handled the hard parts
- Presence without polling
- Chat online status is a Redis hash: each WebSocket connect increments the user's counter, disconnect decrements it, and the key is deleted at zero, so multiple tabs/devices can't falsely log a user out.
- Strangers don't get a DM
- New contacts land in a separate message-requests channel until accepted. The consent boundary is enforced by the backend rooms/requests split, not hidden UI.
- Paywalls that survive a refresh
- Paid posts issue purchase links and unlock download access server-side; refunds route through the same payouts API, and sellers onboard through Stripe Connect account linking, no client-side trust.
- Analytics that don't block the feed
- Engagement counters roll up through a scheduled Celery job on a 10-minute beat, so feed reads stay fast while analytics stay fresh enough to feel live.
- A feed that's never empty
- Onboarding's follow-gate isn't cosmetic. It guarantees the first session already has content, which is the cheapest retention feature a social product can ship.
From the real spec
websocket_urlpatterns = [
# pushes to your inbox: new requests, unread counts
re_path(r'ws/chat/updates/$',
consumers.ChatUpdatesConsumer.as_asgi()),
# the live conversation itself
re_path(r'ws/chat/(?P<chat_room_id>\d+)/$',
consumers.ChatConsumer.as_asgi()),
]From Chat/routing.py: one consumer per conversation, one per user for inbox pushes, so 'someone messaged you' lands without the chat screen being open.
ONLINE_KEY = "chat_online_counts"
def mark_online(user_id):
_redis().hincrby(ONLINE_KEY, user_id, 1)
def mark_offline(user_id):
count = _redis().hincrby(ONLINE_KEY, user_id, -1)
if count <= 0:
_redis().hdel(ONLINE_KEY, user_id) # truly offlineFrom Chat/consumers.py: online status is a Redis counter, not a flag, open a second tab and the count goes 2, close one and it goes 1. The user only goes offline when the last connection drops.
path("connect-stripe-account/", views.connect_stripe_account),
path("check-is-stripe-registered/", views.check_is_stripe_registered),
path("generate-purchase-link-for-the-product/",
views.generate_purchase_link_for_the_product),
path("unlock-download-link/", views.unlock_download_link),
path("refund-payment/", views.refund_payment),From payouts/urls.py: sellers connect their own Stripe account, purchases generate gated links, and refunds go through the same API, platform money never sits in the app.
Stack
Frequently asked questions
Is this a real social platform or a mockup?
Real: the backend exposes ~94 API routes across 13 Django domains (posts, chat, followers, friendships, payouts, subscriptions, analytics, notifications, help center, newsletter, Shopify). The demo video was recorded on the running app.
How does the chat work?
Django Channels over WebSockets: each conversation gets a room consumer and each user gets a personal updates consumer for inbox pushes. Presence is tracked in Redis so multiple tabs don't break online status.
Can creators actually earn money?
Yes, posts can be paywalled with generated purchase links, buyers unlock content after Stripe checkout, sellers connect their own Stripe account for payouts, and refunds are handled in the same flow.
What's the follow-gate about?
New users must follow at least one company before the feed unlocks. It solves the cold-start problem: the first session already has posts in it instead of an empty screen.
Can Usmani Labs build a platform like this?
Yes, social graphs, real-time messaging, payments and moderation are the systems we ship at a fixed price. Tell us about yours.
Keep exploring
- Custom Software Development : Internal systems, portals and tools built around your actual workflow.
- Web Development : Marketing sites, web applications and portals: fast, accessible and built to rank.
- SaaS Development : Subscription products from MVP to multi-tenant scale.
- Keynou case study : Free online file-conversion and document tool suite.
- Gatha case study : White-label AI-visibility & GEO audit platform for agencies.
- Keynou Flow case study : A real-time Kanban workspace, boards, cards, checklists, comments and live presence, built as a free-first alternative to heavyweight task tools.
- Workflow automation for agencies : the same fixed-price, built-around-your-workflow approach for agencies.
- Workflow automation for recruiting firms : the same fixed-price, built-around-your-workflow approach for recruiting firms.
- Software we build, by industry
Built by Usmani Labs
We turn manual business workflows into software that runs them: fixed price, shipped in weeks.