Skip to content
dijnie2Public

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Contributors Forks Stargazers Issues


Junto

Find your people. Work together.
A coworking partner matching PWA where remote workers discover each other for focused, in-person sessions at shared spaces.

Report Bug · Request Feature


Next.js React TypeScript Supabase Tailwind PWA


Table of Contents
  1. About The Project
  2. Getting Started
  3. Project Structure
  4. Design System
  5. Database Schema
  6. Roadmap
  7. Contributing
  8. Contact
  9. Acknowledgments

About The Project

Remote work is great for flexibility, but it can be isolating. Junto connects remote workers who want to cowork in-person at cafes, coworking spaces, and libraries — turning solo work into focused, social sessions.

Think of it as a matching app, but instead of dates, you're finding your next coworking partner.

(back to top)

How It Works

  1. Discover        2. Match          3. Chat          4. Meet Up
 ┌─────────┐      ┌─────────┐      ┌─────────┐      ┌─────────┐
 │  Swipe  │ ───> │  Both   │ ───> │ Message │ ───> │ Cowork  │
 │  cards  │      │  liked  │      │  & plan │      │  IRL!   │
 └─────────┘      └─────────┘      └─────────┘      └─────────┘

Features

Discover

Swipe through nearby coworking partners. Filter by work type, interests, and preferred locations.

Live Broadcasts

Signal you're working now at a specific spot so others can join you in real-time.

Chat

Message your matches to coordinate sessions, share locations, and plan meetups.

Sessions

Propose, accept, and complete coworking sessions with time, location, and focus area.

Reviews & Reputation

Rate sessions on attitude and punctuality. Build trust through verified coworking history.

Streaks

Track consecutive coworking weeks. Stay motivated with your productivity streak.

(back to top)

Built With

Layer Technology Version
Framework Next.js 16
UI React 19
Language TypeScript 5
Database & Auth Supabase Postgres + RLS + PostGIS
Styling Tailwind v4
Animations Framer Motion 12
Icons Lucide React
PWA Serwist Service Worker
Compiler React Compiler Babel plugin

(back to top)

Getting Started

To get a local copy up and running, follow these steps.

Prerequisites

  • Node.js 20+
  • npm 10+
    npm install npm@latest -g
  • A Supabase project (free tier works)

Installation

  1. Clone the repo

    git clone https://github.com/Dijnie/junto.git
    cd junto
  2. Install dependencies

    npm install
  3. Configure environment

    cp .env.example .env.local

    Then edit .env.local with your Supabase credentials:

    NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
    NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY=your-publishable-key
  4. Set up the database

    Run the migration file in your Supabase SQL editor:

    supabase/migrations/00001_initial_schema.sql
    

    This creates tables for profiles, swipes, matches, messages, sessions, reviews, and live_statuses — with PostGIS enabled for location-based queries and RLS policies for data security.

  5. Start the dev server

    npm run dev

    Open http://localhost:3000 to see the app.

All Available Commands
Command Description
npm run dev Start development server
npm run build Create production build
npm run start Start production server
npm run lint Run ESLint

(back to top)

Project Structure

src/
├── app/
│   ├── (app)/                    # Authenticated routes
│   │   ├── discover/             #   Swipe & broadcast discovery
│   │   ├── chat/[matchId]/       #   1:1 messaging
│   │   ├── sessions/             #   Session management
│   │   └── profile/              #   User profile
│   ├── (auth)/                   # Login & OAuth callback
│   ├── onboarding/               # New user setup flow
│   └── globals.css               # Design tokens
│
├── components/
│   ├── discover/                 # Discovery cards, broadcast sheet
│   ├── chat/                     # Chat bubbles, input
│   ├── sessions/                 # Session cards, proposals
│   ├── profile/                  # Profile display & editing
│   ├── layout/                   # App shell, navigation
│   └── ui/                      # Shared primitives
│
├── hooks/                        # use-user, database helpers
├── lib/
│   ├── supabase/                 # Client (browser) + Server (SSR)
│   └── constants.ts              # Shared constants
└── types/                        # TypeScript definitions

(back to top)

Design System

Tokens are defined in src/app/globals.css via Tailwind v4 @theme inline and consumed as CSS custom properties throughout the app.

Colors

primary#2D5A3D
primary-light#3d7a53
accent#D4A574
background#F5F0EB
surface#FFFFFF
text#1A1A1A
text-muted#6B7280
border#E5E2DC

Border Radii

card12px
button8px
tag24px

Typography

font-sansInter, system-ui, sans-serif

(back to top)

Database Schema

profiles ──┬── swipes
            ├── matches ──┬── messages
            │             └── sessions ── reviews
            └── live_statuses
Table Key Fields Notes
profiles name, work_type, interests[], location PostGIS geography point
swipes swiper_id, swiped_id, direction Unique constraint per pair
matches user_a_id, user_b_id Created on mutual LIKE
messages match_id, sender_id, content Real-time via Supabase
sessions match_id, status, time, location PROPOSED / ACCEPTED / COMPLETED / CANCELLED
reviews session_id, attitude_stars, punctuality_stars 1-5 scale, unique per reviewer
live_statuses user_id, area_name, venue_name "Working Now" broadcasts

All tables use UUID primary keys, RLS policies, and timestamptz for timestamps. Location data uses PostGIS geography(Point, 4326) for accurate distance calculations.

(back to top)

Roadmap

  • User profiles & onboarding
  • Swipe-based discovery
  • Real-time chat
  • Session proposals & management
  • Live "Working Now" broadcasts
  • Review & rating system
  • PWA with offline support
  • Push notifications
  • Group coworking sessions
  • Venue recommendations
  • Leaderboards & achievements

See the open issues for a full list of proposed features and known issues.

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feat/amazing-feature)
  3. Commit your Changes (git commit -m 'feat: add amazing feature')
  4. Push to the Branch (git push origin feat/amazing-feature)
  5. Open a Pull Request

(back to top)

Contact

Project Link: https://github.com/Dijnie/junto

(back to top)

Acknowledgments

(back to top)


Built with care for remote workers who want real human connection.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages