Skip to content

Repository files navigation

OneMinReviews

Honest restaurant reviews, one minute at a time.

OneMinReviews is a static site that archives and organizes the one-minute restaurant video reviews from the TikTok account @oneminreviews. Real food. Real opinions. No sponsored content, no algorithms -- just honest takes on restaurants across the US.


What You'll Find

  • 21+ video reviews from @oneminreviews on TikTok
  • 14 restaurants across 5 cities: New York, Los Angeles, Chicago, Austin, and the Bay Area
  • Curated review snippets pulled from Google and Yelp, so you can see what other diners think alongside each video
  • Star ratings from both Google and Yelp displayed on every restaurant page
  • Cuisines covered: Pizza, Deli, Russian, Middle Eastern, American, BBQ, Vegetarian, and more

Reviews & Ratings

Every restaurant page features:

  • An embedded TikTok video review (deferred loading for performance)
  • Google and Yelp ratings with review counts
  • Curated review snippets from real diners -- quotes, star ratings, author, and date
  • A FAQ section answering common questions like "Is this place worth it?" and "What do customers say?"

Restaurants include fan favorites like Prince Street Pizza, Joe's Pizza, Tatiana, Langer's Delicatessen, Pizzana, Bavel, Portillo's, Lou Malnati's, Franklin Barbecue, Superiority Burger, and more.

Key Features

Feature Description
Browse by City Filter reviews by city -- NYC, LA, Chicago, Austin, Bay Area
Browse by Cuisine Find reviews by cuisine type -- pizza, BBQ, deli, and more
Top Rated A ranked list of the highest-rated restaurants by combined Google & Yelp scores
TikTok Embeds Click-to-load TikTok video embeds on every restaurant page
SEO Optimized JSON-LD structured data (VideoObject, Restaurant, FAQPage), Open Graph tags, Twitter Cards, and XML sitemaps (including image and video sitemaps)
Automated Pipeline Scrapes TikTok metadata, enriches restaurant data via Google Places & Yelp APIs, generates OG images, and builds -- all via GitHub Actions

Tech Stack

Category Technology
Framework Astro 5.x (static output)
Language TypeScript + Astro components
Styling CSS (global + component-scoped), Inter font via Google Fonts
Scraping yt-dlp for TikTok video metadata
NLP compromise for restaurant name extraction
Image Processing sharp for OG image generation
Media fluent-ffmpeg for media processing
Deployment GitHub Pages via GitHub Actions

Project Structure

/
├── data/
│   ├── videos.json           # TikTok video metadata
│   ├── restaurants.json      # Enriched restaurant data & review snippets
│   └── overrides.json        # Manual data overrides
├── scripts/
│   ├── scrape-tiktok.js      # Fetches video metadata from @oneminreviews
│   ├── enrich-restaurants.js # Google Places + Yelp enrichment
│   ├── process-media.js      # FFmpeg media processing
│   ├── generate-og-images.js # OG image generation with sharp
│   └── generate-sitemaps.js  # XML sitemap generation
├── src/
│   ├── components/
│   │   ├── FAQ.astro          # FAQ section with structured data
│   │   ├── ReviewSnippet.astro# Google/Yelp review quote cards
│   │   ├── StarRating.astro   # Star rating display
│   │   ├── TikTokEmbed.astro  # Click-to-load TikTok player
│   │   └── VideoCard.astro    # Video thumbnail card
│   ├── layouts/
│   │   └── Base.astro         # Base HTML layout with SEO meta
│   ├── lib/
│   │   └── data.ts            # Data loading & FAQ generation
│   ├── pages/
│   │   ├── index.astro        # Home page
│   │   ├── top-rated.astro    # Top-rated restaurants
│   │   ├── city/[city].astro  # City-filtered listings
│   │   ├── cuisine/[cuisine].astro # Cuisine-filtered listings
│   │   └── [restaurant]/[...slug].astro # Restaurant detail pages
│   └── styles/
│       └── global.css
├── astro.config.mjs
├── package.json
└── tsconfig.json

Commands

All commands are run from the root of the project:

Command Action
npm install Install dependencies
npm run dev Start local dev server at localhost:4321
npm run build Build the production site to ./dist/
npm run preview Preview the build locally before deploying
npm run scrape Scrape latest video metadata from @oneminreviews
npm run enrich Enrich restaurant data via Google Places & Yelp APIs
npm run process-media Process media files with FFmpeg
npm run generate-og Generate Open Graph images
npm run generate-sitemaps Generate XML sitemaps
npm run pipeline Run the full pipeline: scrape, process, enrich, build, sitemaps

Deploying to GitHub Pages

The site is deployed to GitHub Pages via a GitHub Actions workflow. Follow these steps to set it up for your own fork or repo.

1. Enable GitHub Pages

  1. Go to your repository on GitHub.
  2. Navigate to Settings > Pages.
  3. Under Build and deployment > Source, select GitHub Actions.

2. Configure Repository Permissions

The workflow needs write access to deploy artifacts and commit updated data back to the repo.

  1. Go to Settings > Actions > General.
  2. Under Workflow permissions, select Read and write permissions.
  3. Click Save.

3. Add Repository Secrets

The full pipeline (scrape, enrich, build, deploy) requires API keys stored as repository secrets.

  1. Go to Settings > Secrets and variables > Actions.
  2. Click New repository secret and add each of the following:
Secret Required Description
GOOGLE_PLACES_KEY Yes Google Places API key for restaurant data & reviews
YELP_API_KEY Yes Yelp Fusion API key for ratings and reviews
PROXY_URL No Proxy URL for TikTok scraping (helps avoid rate limits)

Note: If you only need to build and deploy the site (without refreshing data), the secrets are not required -- the build step uses the existing data/*.json files checked into the repo.

4. Trigger the Deployment

The workflow (.github/workflows/build-deploy.yml) triggers automatically on:

Trigger What Runs
Push to main Build & deploy only (no scraping/enrichment)
Weekly schedule (Sundays 6:00 UTC) Full pipeline -- scrape, process media, enrich, generate OG images, build, deploy
Manual dispatch Choose which pipeline steps to run via the Actions UI

To trigger a deployment manually:

  1. Go to Actions > Build & Deploy in your repository.
  2. Click Run workflow.
  3. Optionally toggle Run TikTok scraper, Run media processing, or Run restaurant enrichment to true.
  4. Click Run workflow to start.

5. Verify the Deployment

Once the workflow completes:

  1. Go to Settings > Pages -- your site URL will be displayed at the top (e.g., https://<username>.github.io/<repo>/).
  2. If you're using a custom domain (like oneminreviews.com), configure it under Settings > Pages > Custom domain and add the appropriate DNS records.

How the Workflow Works

The GitHub Actions workflow (.github/workflows/build-deploy.yml) runs in two jobs:

  1. Build -- Installs dependencies, optionally runs the data pipeline (scrape, enrich, process media, generate OG images), builds the Astro site to ./dist/, generates sitemaps, and uploads the artifact.
  2. Deploy -- Deploys the uploaded artifact to GitHub Pages using actions/deploy-pages@v4.

Data updates (new videos, enriched restaurant info, generated images) are automatically committed back to the repo so subsequent builds start from the latest data.

Follow @oneminreviews

Check out the latest reviews on TikTok: @oneminreviews

Visit the site: oneminreviews.com

About

The website of Honest restaurant reviews, one minute at a time.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages