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.
- 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.
- Framework: Next.js 14 (App Router)
- Database & Storage: Supabase (PostgreSQL & Object Storage)
- Authentication: Supabase Auth
- Email Delivery: Resend
- Styling: Tailwind CSS
- Package Manager / Runtime: Bun (or NPM)
Ensure you have Bun (recommended) or Node.js installed.
git clone https://github.com/Praashh/gatherline.git
cd gatherline
bun install # or npm install- Create a free project on Supabase.
- Open the SQL Editor in the Supabase Dashboard.
- Copy the schema definitions from supabase/schema.sql and execute them to create the
requestsanditemstables, Row Level Security policies, and theuploadsbucket.
Copy .env.example to .env.local (or .env):
cp .env.example .env.localFill 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:3000or your Vercel deployment URL).CRON_SECRET: A secure random string for verifying Vercel Cron requests.
Start the development server:
bun run dev # or npm run devOpen http://localhost:3000 in your browser.
To automatically remind clients who haven't completed their requests:
- Set up a Vercel Cron or any external HTTP request scheduler to hit the endpoint:
GET /api/cron/reminders - 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.
Distributed under the MIT License.