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.
- 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
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.
| 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 |
| 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 |
/
├── 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
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 |
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.
- Go to your repository on GitHub.
- Navigate to Settings > Pages.
- Under Build and deployment > Source, select GitHub Actions.
The workflow needs write access to deploy artifacts and commit updated data back to the repo.
- Go to Settings > Actions > General.
- Under Workflow permissions, select Read and write permissions.
- Click Save.
The full pipeline (scrape, enrich, build, deploy) requires API keys stored as repository secrets.
- Go to Settings > Secrets and variables > Actions.
- 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/*.jsonfiles checked into the repo.
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:
- Go to Actions > Build & Deploy in your repository.
- Click Run workflow.
- Optionally toggle
Run TikTok scraper,Run media processing, orRun restaurant enrichmenttotrue. - Click Run workflow to start.
Once the workflow completes:
- Go to Settings > Pages -- your site URL will be displayed at the top (e.g.,
https://<username>.github.io/<repo>/). - If you're using a custom domain (like
oneminreviews.com), configure it under Settings > Pages > Custom domain and add the appropriate DNS records.
The GitHub Actions workflow (.github/workflows/build-deploy.yml) runs in two jobs:
- 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. - 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.
Check out the latest reviews on TikTok: @oneminreviews
Visit the site: oneminreviews.com