Erfan Kooshesh

Creative Technologist

☰
Gatherly: Designing and Building a Social Planning Platform

Gatherly: Designing and Building a Social Planning Platform

Gatherly: Designing and Building a Social Planning Platform

Role: Founder, product designer and developer (solo): product strategy, UX, visual design, front-end and back-end

Scope: Groups and invites, shared availability calendar, activity voting, plans with RSVPs and itineraries, notifications and email, profiles, admin and theming system, brand identity, Premium subscriptions

Platform: Responsive web app, installable on phones, with a React front end and a PHP API with its own database

Live: gatherly.vip

Timeline: May 2026 – present. The brand refresh and Premium were added in September 2026.

Gatherly landing page
Gatherly landing page

Overview

Every friend group has the same conversation: “We should hang out sometime.” Then twenty messages about dates, three people who never answer, and a plan that quietly dies in the group chat.

Gatherly is the tool I designed and built to fix that. A group shares one calendar where everyone marks the days they’re free. Ideas get suggested and voted on, the best one becomes a plan with a date, an itinerary and real RSVPs, and everyone gets reminded so the plan actually happens.

I’ve been designing and building it since May 2026, solo: product decisions, interface design, the front end, the API and the database. This case study walks through the core product, then the September brand refresh and the Premium subscription system.

The problem

Planning with friends breaks down in three places:

  1. Finding a date. Group chats are terrible at availability. “Does Saturday work?” turns into a thread nobody can scan.
  2. Deciding what to do. Ideas get suggested and forgotten, with no sense of what most people actually want.
  3. Making it real. Even with a date and an idea, nobody knows who’s actually coming, what the plan is, or what it’ll cost.

Design principles

  • Answer “when?” at a glance. The most important information, who’s free on which day, should be readable without tapping anything.
  • Let the group decide. Voting and RSVPs replace the loudest voice in the chat.
  • Move ideas forward. Every screen nudges an idea one step closer to a confirmed plan.
  • Calm, not busy. A social app that feels like a nice paper planner, not a feed.

1. Groups

Dashboard with upcoming plans and groups
Dashboard with upcoming plans and groups

The home screen answers two questions: what’s coming up, and which groups am I in. “Coming up” shows the next plans across all your groups, with each plan’s status and your own RSVP (“You: going”), so you never have to open a group just to remember what you said yes to.

Joining a group works three ways, depending on how private it is:

  • Invite code. Every group has a short code (like WKND4826) that joins you instantly, even into a private group.
  • Discover. Public groups are listed so new people can find them.
  • Request to join. Private groups can be requested, and a group admin approves or declines.
Join a group: the Discover tab
Join a group: the Discover tab

Group admins control privacy and review requests in the group’s settings. A join request carries the person’s note, so the admin has context before approving.

Group settings with privacy and join requests
Group settings with privacy and join requests

2. The shared calendar

This is the heart of Gatherly.

The group availability calendar
The group availability calendar

Each person marks days as Free or Busy. The calendar shows your own status as a colored day, and a small badge on every day shows how many people in the group are free. You can see the best day for the group in a second: the busy weekdays, the Saturday where 7 of 8 people are free.

  • Plans appear on the calendar as colored bars under their dates, so availability and commitments live in one view.
  • Past days are locked and faded, keeping attention on what’s ahead.
  • Month and week views, with a Today button.

Tapping a day opens a panel to set your own status, see the plans that day, and see exactly who’s free, with each person’s avatar.

A selected day: your status, plans and who's free
A selected day: your status, plans and who’s free

How this panel appears (inline under the calendar or as a pop-up), the default view, and whether members can switch views are all controlled from the admin panel. More on that in section 6.

The calendar in dark mode
The calendar in dark mode

3. From idea to plan

Activities are the group’s shared wishlist. Anyone can suggest something, with a category, location and rough cost, and everyone votes. The list re-sorts by votes, so the group’s real favorites rise to the top. As the screen puts it: top votes become plans.

Activity voting
Activity voting

Plans turn an idea into an outing. A plan moves through a simple, visible lifecycle:

  • Draft: the organizer is still shaping it
  • Published: the group can see it and RSVP
  • Confirmed: it’s happening
  • Past or Cancelled: moved out of the way into an archive
The Plans tab
The Plans tab

Opening a plan shows everything in one place: date, organizer, a description, the RSVP choices (“I’m in” / “Maybe” / “Can’t”) with live counts, and a day-by-day itinerary. Each stop has a time, a type, a location and a cost marked per person or for the whole group, so nobody is surprised by the bill.

Plan detail with RSVPs and itinerary
Plan detail with RSVPs and itinerary
A plan on a phone
A plan on a phone

4. Staying in the loop

Plans fail when people forget. Gatherly sends in-app notifications for new plans, RSVP updates, reminders to reply, join requests, and a digest of what’s coming up and when the group is free.

Notifications
Notifications

Gatherly also sends email for welcomes, plan invites and reminders. Admins can edit each email’s subject line, heading, intro and button text using variables like {{name}} and {{plan}}, with a live preview and a test send. People can pause emails, and the members list shows who has.

Email templates in the admin panel
Email templates in the admin panel

5. People

Every group has roles: the creator, moderators who can manage members and plans, and members. Tapping anyone opens their profile with a bio, home base, the groups you share, and stats on how many plans they’ve attended, suggested and organized.

A member's profile
A member’s profile

Profiles carry a bit of personality too: an uploaded photo or a generated initials avatar, plus optional animated frames.

6. An admin panel that’s really a design system

I wanted to be able to restyle and reconfigure Gatherly without touching code, so the admin panel controls the product’s identity and behavior:

  • Identity: app name, tagline and wordmark style
  • Logo and app icon for the browser tab and phones’ home screens
  • Color palettes: six tuned presets, each defining accent colors and, for Grove, the full set of neutrals for light and dark mode, plus a custom option
  • Registration: open or close new sign-ups
  • Calendar behavior: how the day panel appears, the default view, and whether members can switch views
  • Default theme: auto, light or dark
  • Preset avatars, plus advanced per-token color overrides and custom CSS
Identity, logo and color palettes
Identity, logo and color palettes
Calendar behavior settings
Calendar behavior settings

Because every color in the interface comes from design tokens, picking a palette re-themes the entire app instantly.

7. On your phone

Gatherly is designed mobile-first. On a phone it uses a bottom tab bar, the calendar keeps its free and busy colors at a smaller size, and the app can be added to the home screen to open full screen like a native app.

Dashboard on a phone
Dashboard on a phone
Calendar on a phone
Calendar on a phone

8. The brand refresh (September 2026)

As the product matured, I rebuilt Gatherly’s visual identity around its logo: a map pin with a G inside it, a literal “here’s where we’re meeting.”

Palette. The logo’s leaf green leads, deepened slightly for buttons so white text stays readable. Lavender is the second color, for highlights; green and lavender is an unusual, upscale pairing. A small honey accent adds warmth, the neutrals carry a faint green tint, and dark mode is a deep forest night rather than flat black. It ships as the Grove preset in the admin panel.

The logo, everywhere. I traced the logo into a vector so it stays crisp from the 16px favicon to large hero sizes, in green or white. It appears in the top bar, the favicon and home-screen icon, the sign-in and register screens, and the loading screen.

Motion with meaning. The pin drops onto the page with a small squash and settle, then location-beacon rings ripple out from its tip, the way a map marks a destination.

Sign-in screen
Sign-in screen
Loading screen with the pin and beacon
Loading screen with the pin and beacon

The sign-in panel is a small scene: a faint street-map grid, the pin at the center, and a plan coming together around it. The public landing page shows a live calendar card that always displays the visitor’s current month, with today selected and a mix of free and busy days.

Create account in dark mode
Create account in dark mode

9. Premium: a subscription system, not just a checkout (September 2026)

The free tier caps each event at 10 guests. That cap marks the exact moment a host is most willing to pay, so I designed Premium around it: discovery, plan comparison, an honest trial, failed payments, and changing or leaving a plan later. Premium is currently a design preview; no payments are processed.

Pricing. Three tiers: Free, Plus ($6/mo, or $4.80/mo billed yearly) and Pro ($12/mo, or $9.60/mo billed yearly). Prices are the largest type on each card, yearly billing shows the struck-through monthly price, and on phones the recommended plan moves to the top.

Premium pricing
Premium pricing

The paywall at the moment of need. When an event’s 10 free spots fill, the host sees the upgrade over the event itself, with “10 of 10 guests, +3 waiting” and one clear offer: “Let the 3 waiting friends in right now.”

Paywall when an event fills up
Paywall when an event fills up

Checkout. The order summary comes first, “Due today: $0.00” is the largest number, and a plain-language auto-renewal disclosure with a required checkbox sits before the subscribe button. A declined card gets a designed error with a one-tap recovery, and promo codes stay tucked away until needed.

Checkout
Checkout
A promo code applied and a declined card
A promo code applied and a declined card

Confirmation. A timeline instead of a receipt: the trial starts today at $0.00, a reminder email arrives 3 days before it ends, then the first payment.

Confirmation with the trial timeline
Confirmation with the trial timeline

Managing the plan. Plan changes show the proration math up front. Cancelling goes reason → relevant offer → confirm → undo, and “Continue cancelling” always gets equal weight with the offer.

Changing plans with the proration summary
Changing plans with the proration summary
The retention offer
The retention offer

Built for real

Gatherly is a live product, not a mockup. The front end is a React single-page app; the back end is a PHP API with its own database covering accounts, groups, availability, plans, RSVPs, activities, votes, notifications and email. Everything visible here, from the palettes to the calendar behavior, is driven by real settings.

Every screen is checked at desktop and phone sizes, in light and dark mode. All motion uses transform and opacity only and respects the operating system’s reduced-motion setting.

What’s next

  • Connect a real payment processor for Premium
  • Trigger the upgrade paywall from other limits, like groups and co-hosts
  • Smarter date suggestions based on when the most people are free
  • Measure what matters: how many ideas become plans, and how many plans actually happen

Gatherly is an independent product I design, build and run. See also: The Giftings, Lumio, EventIQ.

Screenshots of the signed-in app use made-up sample people and groups.

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *