Skip to content

Praashh/gatherline

Repository files navigation

Gatherline

Stop chasing clients for content. Send one link listing everything you need (copy, logos, photos, files). The client fills it in — no login required — and Gatherline sends automated email reminders until every item is collected.

Built for freelance web designers and small agencies. Gatherline is a lean, self-hosted or managed alternative to expensive content gathering platforms like Content Snare.


Features

  • Simplified Client Portals: Share a single link (/r/[token]) with your client where they can upload files and fill out text input items. No client registration or login required.
  • Project Dashboard: Track the collection progress of all your active client projects, view response items, download files, and archive completed requests.
  • Automated Email Reminders: Built-in CRON-driven scheduling that automatically pings clients (via Resend) at custom intervals until all requested content has been uploaded.
  • Secure File Storage: Direct integration with Supabase Storage for secure client uploads, served with time-limited signed URLs to request owners.
  • Minimalist Aesthetics: Designed with a clean, high-density, monochromatic user interface optimized for professional developer and design workflows.

Tech Stack


Setup & Installation

1. Prerequisites

Ensure you have Bun (recommended) or Node.js installed.

2. Clone and Install Dependencies

git clone https://github.com/Praashh/gatherline.git
cd gatherline
bun install # or npm install

3. Database Setup (Supabase)

  1. Create a free project on Supabase.
  2. Open the SQL Editor in the Supabase Dashboard.
  3. Copy the schema definitions from supabase/schema.sql and execute them to create the requests and items tables, Row Level Security policies, and the uploads bucket.

4. Configure Environment Variables

Copy .env.example to .env.local (or .env):

cp .env.example .env.local

Fill in the following variables in your .env.local file:

  • NEXT_PUBLIC_SUPABASE_URL: Your Supabase Project URL.
  • NEXT_PUBLIC_SUPABASE_ANON_KEY: Your Supabase Anonymous API key.
  • SUPABASE_SERVICE_ROLE_KEY: Your Supabase Service Role key (needed for server-side operations, keep private).
  • RESEND_API_KEY: Your Resend API key.
  • FROM_EMAIL: The verified sender address in your Resend account (e.g., Gatherline <hello@yourdomain.com>).
  • NEXT_PUBLIC_APP_URL: The domain URL of your application (used to build links in email reminders, e.g. http://localhost:3000 or your Vercel deployment URL).
  • CRON_SECRET: A secure random string for verifying Vercel Cron requests.

5. Running Locally

Start the development server:

bun run dev # or npm run dev

Open http://localhost:3000 in your browser.


Cron & Reminders Integration

To automatically remind clients who haven't completed their requests:

  1. Set up a Vercel Cron or any external HTTP request scheduler to hit the endpoint: GET /api/cron/reminders
  2. Include the following header for authorization: Authorization: Bearer <your-CRON_SECRET>

This cron endpoint queries all non-archived, pending requests that are due for reminders, check progress, and automatically sends a personalized reminder email using Resend.


License

Distributed under the MIT License.

About

Send one link listing everything you need. Your client fills it in, and we email them daily reminders until every item is in.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages