Revista is an open-source photography portfolio and blog theme built on Astro v7.1.6, Tailwind CSS v4.2.2, and TypeScript v5.9.3 that turns Markdown/MDX content collections into a static site with photo galleries, article indexes, RSS feeds, and a CV page.
What is Revista?
Revista is a photography portfolio and blog template created by Erfi Anugrah. It takes content authored in Markdown/MDX files stored in src/content/ and generates a fully static site using Astro's content collection API and glob loader pattern. The project outputs a deployable dist/ directory that runs on Cloudflare Workers (static assets) or as a Docker image served by BusyBox httpd. The site is organized into six content collections: muses (photography), long_form (articles), short_form (quick posts), zeitweilig (temporary thoughts), authors (contributor bios), and cv (resume data).
What makes Revista stand out?
- Six type-safe content collections — Each collection is defined with a Zod schema in
content.config.ts, and content creators can validate frontmatter at build time. The shared base schema covers title, tags, author, description, image with focal-point coordinates, and publication dates. - Photography-first responsive breakpoints — Instead of Tailwind's defaults, the theme defines custom breakpoints at 800px, 1200px, 1900px, and 2500px to prioritize image display on phones, laptops, desktops, and ultra-wide monitors.
- Custom lightbox at under 2.4 KB gzipped — A purpose-built lightbox script replaces GLightbox (73 KB) and offers multi-level zoom, scroll-wheel cursor-anchored zoom up to 5x, pinch zoom, keyboard navigation, and touch swipe. It uses only
scale()andtranslate3d()transforms to keep compositing on the GPU. - Built-in Pagefind search — The postbuild step indexes the site with Pagefind, and a custom dialog-based search modal supports collection filtering, result thumbnails, and the
Ctrl+K/Cmd+Kkeyboard shortcut. - Per-collection RSS feeds — Each content type generates its own
rss.xmlusing@astrojs/rss, letting readers subscribe to just the photography, long-form, or short-form content they care about. - Content management CLI tools —
bun run createprovides an interactive prompt that reads schema requirements and generates date-slugged.mdxfiles;bun run update-postupdates frontmatter fields such as tags, titles, and dates with a dry-run preview. - Dual Shiki syntax highlighting — Code blocks use the
rose-pine-dawntheme for light mode andtokyo-nightfor dark mode, with both themes emitted and toggled by CSS. - Multiple deployment targets — GitHub Actions deploys to Cloudflare Workers, builds a multi-architecture Docker image (linux/amd64, arm64, arm/v6, arm/v7) signed with Cosign, and purges the Cloudflare edge cache.
Who is it for?
- Photographers who want a fast, image-first portfolio with masonry photo grids, focal-point-aware cropping, and a custom lightbox for full-resolution viewing.
- Bloggers and writers who need separate content types for long-form essays, short notes, and ephemeral thoughts, each with its own RSS feed and tag archive.
- Astro developers looking for a documented starting point with TypeScript, Tailwind CSS v4, content collections, custom scripts, and a full CI/CD pipeline.
- Personal-branding users who want an integrated CV page supported by a pre-rendered HTML export from a separate Next.js app.
What can you do with Revista?
- Publish photo essays: Add a new file under
src/content/muses/and it automatically appears in the/musesindex, gets a detail page, tags, and an RSS entry. - Run a multi-category blog: Write long-form and short-form posts in separate collections, each with its own routing, tag pages, and feed.
- Deploy to the edge or a container:
bun run buildproduces static output that can be pushed to Cloudflare Workers via Wrangler or packaged into a BusyBox-based Docker image with a single command. - Extend the search experience: The Pagefind modal supports filtering by collection (muses, short_form, long_form, zeitweilig, authors) through
data-pagefind-filterattributes.
How does Revista work?
Content lives as .mdx files with validated frontmatter. Astro generates routes from the content collections using shared helpers like buildDetailPaths() and buildTagPaths(). The prebuild script syncs version badges, and postbuild runs Pagefind indexing. Local development uses bun run dev, and production builds run bun run build with Bun as both runtime and package manager.
Pricing
Revista is free and open-source under the MIT License. The blog content and images are not covered by the license and remain the property of their authors.
FAQ
Is Revista free?
Yes. The theme is released under the MIT License, so you can use, modify, and deploy it freely. The sample blog content in the repository is not covered by the MIT License.
What tech stack does Revista use?
Revista uses Astro v7.1.6 as the static site generator, Tailwind CSS v4.2.2 for styling, TypeScript v5.9.3 for scripting, and Bun as the runtime and package manager. MDX is handled by @astrojs/mdx v7.0.5.
Does Revista include search?
Yes. The postbuild step runs Pagefind, and a custom search modal provides collection filtering, result thumbnails, and a Ctrl+K shortcut.
How do you create new content in Revista?
Run bun run create in the terminal. The interactive CLI reads the content collection schemas, prompts for required frontmatter fields, validates input, and generates a date-slugged .mdx file in the appropriate collection directory.








