Three page types: home gallery grid, category pages, and image detail pages
astro-frame-shift — Astro Starter Template
By EmaSuriano
A minimalist photo gallery template built with Astro, using view transitions, light and dark themes, and a responsive masonry layout, with over 60 sample images and metadata such as categories and photographer credits.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Smooth navigation between pages using Astro View Transitions
Categories are real routes, not hidden on the client
Light and dark theme switching with persistent storage
CSS-based responsive masonry layout showing 1 to 4 columns depending on screen width
Image metadata centrally managed in gallery.json, including categories, dates, and photographer credits
Template Details
This is a minimalist photo gallery starter built with Astro. Pages are statically generated and include a home gallery grid, category pages, and individual image detail pages; navigation transitions use Astro View Transitions, and categories are implemented as real routes (/category/{slug}/) so transitions work.
Content data is centralized in src/data/gallery.json, where each record contains the image URL, alt text, title, description, category, date, and photographer name with an optional link. Images can belong to multiple categories, and related images are sorted by tag overlap. The repository includes over 60 sample images covering categories such as architecture, nature, street photography, and portraits.
The layout uses a CSS-based masonry grid that displays 1 to 4 columns depending on screen width; images are output through Astro's Image component and accompanied by a build-time image URL validation script. Theme switching supports light and dark color schemes and persists locally, the interface has no borders or shadows, and image information appears only on hover.
Before use, note the following: licenses for third-party assets such as sample images and fonts (Inter, JetBrains Mono) must be checked separately; image URL validation depends on external network reachability; and the template uses yarn as its package manager command.
Is it right for your project?
Use Cases
- Building a personal photography portfolio site
- Creating a minimalist image-focused portfolio
- Gallery projects that need category browsing and image detail pages
- Static sites that want to use view transitions to improve browsing continuity
Suitable For
- Developers familiar with Astro and JSON data configuration
- Individuals or teams needing a minimalist visual style photo gallery
- Projects that accept yarn as the package manager command
- Users willing to verify third-party image and font licenses themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Install dependencies with yarn install and start the local development server with yarn dev (default localhost:4321)
- 2
Add or replace image entries in src/data/gallery.json following the existing field structure
- 3
Run yarn check-images to validate image URLs; validation also runs automatically during build
- 4
Adjust theme colors in tailwind.config.mjs; light mode uses the stone palette and dark mode uses the slate palette
- 5
Third-party assets such as sample images and fonts must be confirmed separately under their respective licenses
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The template states compatibility with Astro 7; before use, confirm that the Astro version in use is compatible with this theme.
- Image URL validation depends on external network reachability and may fail in offline or network-restricted environments.
- The build process automatically runs image URL validation; if external images are unreachable, the build may fail.
- The template uses Inter and JetBrains Mono fonts, whose licenses must be checked separately and may differ from the code license.
- The repository includes over 60 sample images; the licenses for these third-party image assets must be confirmed separately and are not granted along with the code license.
- Demo images, fonts, icons, and other third-party assets must be checked under their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
This theme is **Astro 7 ready**.
Original README
Run `yarn check-images` to verify all URLs are accessible
Original README
Validation runs automatically during build process
Original README
Clean typography with Inter and JetBrains Mono fonts
Original README
https://github.com/EmaSuriano/astro-frame-shift/blob/main/LICENSE.mdhttps://github.com/EmaSuriano/astro-frame-shift/blob/main/README.md60+ curated images with metadata
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- Astro Themes
- Documentation and maintenance reference score
- More documented · 83 / 100
- Technologies
- Astro
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-25
- Screenshot last checked
- 2026-10-02
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: 5166e3c1acb3d44d8aea038f7772d8d3af732d188d4a756018e5441480d5d3a4
2026-10-02T14:54:12.481Z
Source file / repository# Astro Frame Shift - Minimalist Photo Gallery
A clean, minimalist photo gallery built with Astro featuring smooth transitions, dark/light theme support, and responsive masonry layout.
This theme is **Astro 7 ready**.
## Screenshots 📸
Captured from the [live demo](https://emasuriano.github.io/astro-frame-shift/) with [shot-scraper](https://github.com/simonw/shot-scraper). Light and dark run as parallel CI jobs via [`shots-light.yml`](shots-light.yml) / [`shots-dark.yml`](shots-dark.yml) (workflow: [`.github/workflows/screenshots.yml`](.github/workflows/screenshots.yml)). Home, Category, and Image detail.
| Light | Dark |
| ----- | ---- |
|  |  |
|  |  |
|  |  |
## ✨ Features
- **Minimalist Design**: Clean, borderless interface with no shadows or visual clutter
- **Dark/Light Theme**: Persistent theme switching with smooth transitions
- **Responsive Masonry Layout**: CSS-based masonry layout that adapts to all screen sizes
- **Image Validation**: Build-time TypeScript script to verify all image URLs are working
- **Smooth Transitions**: Astro View Transitions for seamless navigation between pages
- **Category routes**: Filter tags are real pages (`/category/{slug}/`) so view transitions work; client-side hide broke them
- **Hover Effects**: Image information appears only on hover for maximum minimalism
- **Performance Optimized**: Static site generation with optimized images using Astro's Image component
## 🎨 Design Philosophy
This gallery embraces ultra-minimalism:
- No borders or shadows
- Clean typography with Inter and JetBrains Mono fonts
- Information only appears on hover
- Stone/slate color palette for subtle elegance
- Generous white space and clean layouts
## 🚀 Project Structure
```text
/
├── public/
│ └── favicon.svg
├── src/
│ ├── components/
│ │ └── ThemeToggle.astro # Dark/light theme toggle
│ ├── content/
│ │ └── config.ts # Content collection schema
│ ├── data/
│ │ └── gallery.json # 60+ curated images with metadata
│ ├── layouts/
│ │ └── Layout.astro # Main layout with theme persistence
│ ├── pages/
│ │ ├── index.astro # Gallery grid page
│ │ └── image/
│ │ └── [id].astro # Individual image detail page
│ └── styles/
│ └── global.css # Global styles
├── scripts/
│ └── check-images.ts # Image URL validation script
└── package.json
```
## 🖼️ Gallery Features
- **60+ Images**: Diverse collection spanning multiple categories
- **Category Organization**: Architecture, Nature, Street Photography, Portraits, and more
- **Photographer Attribution**: Credit with optional links to photographer profiles
- **Related Images**: Images can have multiple categories; related images are ranked by tag overlap
- **Responsive Images**: Optimized loading with Astro's Image component
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :--------------------- | :----------------------------------------------- |
| `yarn install` | Installs dependencies |
| `yarn dev` | Starts local dev server at `localhost:4321` |
| `yarn build` | Build your production site to `./dist/` |
| `yarn preview` | Preview your build locally, before deploying |
| `yarn check-images` | Validate all gallery image URLs |
| `yarn astro ...` | Run CLI commands like `astro add`, `astro check` |
| `yarn astro -- --help` | Get help using the Astro CLI |
## 🛠️ Development
### Adding New Images
Edit `src/data/gallery.json` to add new images:
```json
{
"src": "https://example.com/image.jpg",
"alt": "Image description",
"title": "Image Title",
"description": "Detailed description of the image",
"categories": ["Primary Tag", "Secondary Tag"],
"date": "2024-01-01",
"photographer": "Photographer Name",
"photographerLink": "https://photographer-website.com"
}
```
### Image Validation
The project includes automatic image URL validation:
- Run `yarn check-images` to verify all URLs are accessible
- Validation runs automatically during build process
- Failed URLs are reported for manual review
### Theme Customization
The project uses Tailwind CSS with a stone/slate color palette:
- Light mode: Stone colors (warm, neutral)
- Dark mode: Slate colors (cool blue-gray undertones)
- Easy to customize in `tailwind.config.mjs`
## 📱 Responsive Design
- **Mobile First**: Optimized for mobile viewing
- **Masonry Layout**: 1-4 columns based on screen size
- **Touch Friendly**: Proper hover states and touch interactions
- **Performance**: Lazy loading and optimized images
## 🎯 Performance Features
- **Static Site Generation**: Pre-rendered for maximum speed
- **Image Optimization**: Automatic WebP conversion and responsive sizes
- **View Transitions**: Smooth navigation without full page reloads
- **Minimal JavaScript**: Theme persistence and hover effects only
- **CSS-Based Masonry**: No JavaScript dependencies for layout
Explore similar templates
Compare previews and descriptions within the same stack and category.

astrowind
AstroWind is a free, open-source Astro starter theme using Astro and Tailwind CSS, released under the MIT license.
Astro · Blog
accessible-astro-starter
An accessibility-focused Astro 6 starter template with WCAG 2.2 AA practices, Tailwind CSS 4, TypeScript, Prettier, ESLint, form validation, blog and portfolio examples, and preference toggles for dark mode, high contrast, and reduced motion.
Astro · Blog

astro-erudite
astro-erudite is an opinionated, unstyled static blog template built with Astro and native CSS, with no UI or CSS framework and minimal dependencies.
Astro · Portfolio

astro-shopify
A lightweight Shopify headless ecommerce starter template built with Astro and Svelte, integrating the Shopify Storefront API for product and inventory data, with built-in cart state management and basic add-to-cart and checkout flow.
Astro · E-commerce

brutal
Brutal is a neobrutalism Astro starter theme from ElianCodes, derived from the author's personal site and generalized. It includes a Markdown blog collection, build-time RSS and sitemap, image optimization, Tailwind CSS styling, and Biome checks, with no JavaScript by default.
Astro · Starter

qwind
Qwind is a free and open-source website template built on Qwik and Tailwind CSS, featuring directory-based routing via QwikCity, a Markdown blog, dark mode, and static deployment configuration.
Astro · Tool Site
