# How to Vibe Code Your Own DailyGram (and Stop Paying for It)

> Track & Monitor Instagram, TikTok, X and LinkedIn Profiles

- Site: https://dailygram.me
- Category: Web app (SaaS)
- Verdict: **Solid side project** (75/100 vibecodeable)
- Estimated effort: 1-2 weekends

## Verdict

You can build a personal digest clone over a weekend, but maintaining brittle social media scrapers will become a constant chore.

The core loop of taking a scraped list of posts, running them through an LLM via Vercel AI SDK, and emailing them via Resend is a straightforward weekend build. However, DailyGram's real vulnerability lies in its dependency on web scraping. Instagram and LinkedIn change their DOM structures and tighten rate limits constantly. For personal use, tracking a handful of profiles via Apify or Firecrawl is entirely viable and costs pennies, but turning it into a stable business requires ongoing scraper maintenance that easily outpaces revenue.

### What you can't replicate

- Automated scraping stability across heavily defended platforms without constant maintenance

## What it does

An AI-powered social media monitoring tool that scrapes updates from public profiles, processes captions through an LLM to generate thematic summaries, and delivers a clean email digest.

### Core features

- Public social profile URL parser and normalizer (Instagram, X/Twitter, TikTok, LinkedIn)
- Automated web scraping pipeline via Apify integration to bypass anti-bot mechanisms
- LLM processing pipeline to aggregate and synthesize post captions into thematic summaries
- User configuration dashboard for profile management and delivery schedules
- Cron-based scheduling system to trigger fetches across global time zones
- Transactional HTML email dispatch service using Resend

## The business

### Pricing

- Free: $0 / month
- 10 Profiles: $5 / month
- Unlimited: $50 / month

Founded 2025.
Team size: 1 person.

## The hard parts

- Anti-bot resilience: Instagram, TikTok, and LinkedIn aggressively block scraping IPs and frequently break DOM selectors
- Proxy management: maintaining reliable residential proxy rotations to prevent rate-limit bans
- State reconciliation: handling asynchronous scrape jobs, retries, and partial failures before running the LLM summarizer

## How to vibe code DailyGram

### Prerequisites

- Node.js (free): Runtime environment for Next.js and TypeScript scripts.
- Apify Account ($5/mo free tier credits): Required to run hosted social media scrapers for Instagram, X, TikTok, and LinkedIn.
- Anthropic API Key (Pay-as-you-go (~$2/mo for personal use)): Powers the LLM digest and thematic summarization pipeline.
- GitHub (free): Version control and repository hosting for deployment.

### Recommended AI tools

- Claude Code: Best-in-class coding agent for scaffolding the full-stack Next.js application and writing complex scraping integration handlers.
- Cursor: Excellent AI editor for iterative UI polish and debugging frontend layout components.

### Stack

- Frontend: Next.js (App Router, Tailwind CSS)
- Backend: Next.js Server Actions & API Routes
- Database: Turso (SQLite at the edge)
- Auth: better-auth
- Payments: none (personal clone)
- Other: Vercel AI SDK, Apify API, Resend API

### Hosting

- Vercel (Hosting the Next.js frontend, serverless API routes, and scheduled cron jobs.): $0/mo (Hobby Tier)

### Build guide

1. **Project Scaffolding & Database Schema** — Initialize a Next.js project with Tailwind CSS and set up the Turso database client for storing monitored profiles, user settings, and digest histories.

```
Create a new Next.js 16 project using TypeScript and Tailwind CSS v4. Initialize a Turso SQLite database connection using @libsql/client with a schema containing three tables: 'users' (id, email, timezone, created_at), 'profiles' (id, user_id, platform, handle, url, last_scraped_at), and 'digests' (id, user_id, content, sent_at). Set up environment variable validation in a config file. Ensure the project structure follows the Next.js App Router convention.
```

2. **Authentication & User Dashboard UI** — Implement authentication using better-auth and build a clean dashboard where users can add, view, and delete social media profiles to monitor.

```
Integrate better-auth into the Next.js app supporting magic link email authentication backed by the Turso database. Build a dashboard page at app/dashboard/page.tsx styled with Tailwind CSS that displays a list of monitored social profiles with their platform badge (Instagram, X, TikTok, LinkedIn), a modal form to add a new profile URL/username, and a delete action. Include client-side validation to normalize pasted social links into clean handles.
```

3. **Apify Scraping Integration Service** — Write a backend service module that communicates with Apify actors to fetch recent public posts and metadata for Instagram, X, TikTok, and LinkedIn profiles.

```
Create a server-side service file lib/scraper.ts that interfaces with the Apify API client. Implement functions to trigger and fetch results from public social media scraper actors for Instagram, X (Twitter), TikTok, and LinkedIn. Handle pagination or recent post limit filters (e.g., last 10 posts), normalize the returned JSON payload into a unified TypeScript interface containing post text, timestamp, author handle, like count, comment count, and post URL. Add robust error handling for rate limits and failed actor runs.
```

4. **LLM Summarization Pipeline** — Implement the Vercel AI SDK pipeline to ingest scraped post data and generate structured thematic summaries and individual post breakdowns.

```
Create an AI summarization utility using the Vercel AI SDK and Anthropic API (Claude Sonnet). Write a function summarizeProfilePosts(posts: Post[]) that takes raw scraped posts and prompts the LLM to return a structured JSON object containing: a high-level thematic summary paragraph for the profile, categorized key topics, and concise 1-2 sentence summaries for each individual post with original links preserved. Use generateObject with Zod validation to guarantee correct JSON output shape.
```

5. **Email Dispatch Service with Resend** — Configure Resend to send beautifully styled HTML email digests containing the synthesized summaries and direct post links.

```
Set up an email dispatch function in lib/email.ts using the Resend SDK. Design a responsive HTML email template matching DailyGram's digest layout: header with sender branding and date, an overarching thematic introduction summary, grouped breakdown sections per profile with post counts, and a 'Post Highlights' card list featuring titles, summaries, engagement metrics, and 'View post' buttons. Ensure mobile-responsive table formatting.
```

6. **Cron Job Scheduling & Automation** — Implement Vercel Cron triggers to orchestrate daily background fetching, LLM summarization, and email dispatch for all active users.

```
Create a Next.js API route at app/api/cron/dispatch/route.ts protected by a secret CRON_SECRET header to be invoked by Vercel Cron. Inside this handler, query all active user profiles due for a digest based on their configured delivery time and timezone. For each user, fetch their monitored profiles via lib/scraper.ts, run the summarization pipeline via lib/ai.ts, dispatch the email via lib/email.ts, and update the digest history table. Include comprehensive console logging for tracking cron execution success and failures.
```

### Cost vs paying

**Starting costs (one-time):**

- Domain name (optional): $12/yr
- Apify trial credits: $0
- Total: ~$12 one-time

**Ongoing costs (monthly):**

- Vercel Hobby Hosting: $0/mo
- Turso Database: $0/mo
- Anthropic API & Apify Usage: ~$3 - $8/mo
- Total: ~$5/mo

- Paying for the SaaS instead: $5 - $50/mo
- Build time: 10-15 hours
- AI tool credits: $20 (Claude Pro)
- Break-even: N/A (Personal build)

## Sources

- [DailyGram Homepage & Pricing Structure](https://dailygram.me)
- [Reddit (r/SaaS): Founder discussion on DailyGram's metrics, costs, and traction](https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFOUo8PSVnkkqWBNGGNdZVjafiBViX2x2XFbp4aCxSGWFaIYWhg0x5Bcljj95FybL5bjzk11TapYg2qNRSQHerzEU2Qs2uZIwej5d5dsi9DTCNgb7j6tvT2kuoLX2Nvz_DulHjTRBaYcol6a8QHzUPb_zHc2X4PSSO7SD5yAfrNeYIvAodea_c--)