Static photo gallery template built with Astro
memori — Astro Starter Template
By hant121
An Astro-based static photo gallery template with images hosted on Cloudinary, supporting timeline view, lightbox, and light/dark modes.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Images hosted on Cloudinary, automatically fetched and displayed from the corresponding folder
Supports timeline view and Fancybox lightbox browsing
Provides light/dark modes, custom theme colors, and banners
Gallery content managed via Markdown frontmatter, allowing metadata such as location, camera, and date
Includes pnpm scripts for creating new galleries, uploading to Cloudinary, and HEIC conversion
Template Details
Memori is a static photo gallery website template built with Astro, inspired by Fuwari. It stores images on Cloudinary, and pages automatically display photos by reading the corresponding folder, with support for timeline view, Fancybox lightbox, light/dark modes, custom theme colors and banners, and responsive layout. Gallery content is managed via Markdown files, where frontmatter can include metadata such as title, publication date, description, cover image, shooting location, and camera model.
Before use, you need to register for Cloudinary and configure credentials in .env, and upload images to the galleries/<gallery-name>/ directory. The project provides pnpm scripts for creating new galleries, batch uploading images, converting HEIC, and other operations. The template uses Tailwind CSS v3 rather than v4, a choice made for compatibility with the current configuration.
The template is MIT licensed and can be used, modified, and distributed for free, but demo images are from Unsplash, and third-party assets such as fonts and icons require separate license verification. External services like Cloudinary may incur costs.
Is it right for your project?
Use Cases
- Building a personal photography portfolio website
- Creating an online album with a timeline for travel or event photos
- Static sites that need images hosted on Cloudinary and automatically optimized
- Quickly starting gallery-type projects using Astro and Tailwind CSS v3
Suitable For
- Developers familiar with Astro and Markdown content management
- Users willing to use Cloudinary as an image storage and optimization service
- Photo display scenarios requiring light/dark modes, lightbox, and timeline view
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 20 or higher, and uses pnpm to install dependencies
- 2
Need to register for Cloudinary and configure PUBLIC_CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET, or CLOUDINARY_URL in .env
- 3
Images must be uploaded to the galleries/<gallery-name>/ folder on Cloudinary, either via the pnpm upload-cloudinary script or manually
- 4
Use pnpm new-gallery <name> to create a gallery, and fill in the frontmatter in src/content/galleries/<name>/index.md
- 5
Before deployment, modify the site configuration in astro.config.mjs and set Cloudinary environment variables on the deployment platform
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under MIT license from the public repository; the free scope applies to that version's code and does not imply that external services or third-party assets are free.
Must comply with when using
- The code of this version may be used, modified, commercially used, and distributed for free.
- 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
- Using this template requires registering a Cloudinary account and configuring credentials; image storage and optimization depend on this external service, which may incur costs or be subject to its terms of service.
- Images cannot be stored locally; they must be uploaded to the galleries/<gallery-name>/ folder on Cloudinary for the site to automatically fetch and display photos.
- During deployment, Cloudinary environment variables must be set on the deployment platform, otherwise images will not load properly.
- Demo images are from Unsplash, and their license is independent of the project's MIT code license; verify before use.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; do not judge solely based on 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
Sign up for a free account at [Cloudinary](https://cloudinary.com/)
Original README
Images are stored on Cloudinary, not locally.
Original README
Remember to set the Cloudinary environment variables in your deployment platform
Original README
https://github.com/hant121/memori/blob/main/LICENSEhttps://github.com/hant121/memori/blob/main/README.mdAll images from Unsplash
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-04. 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-03-27
- Screenshot last checked
- 2026-10-04
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.
Review declaration: [email protected] · 2026-10-04
Inspect the recorded source material
SHA-256: e4016901d6cb9baf65aca645de64c6a3c56086709d2366e9354a153e4331d896
2026-10-04T02:31:49.839Z
Source file / repository# 🌸 Memori



A static photo gallery website built with [Astro](https://astro.build). Inspired from [Fuwari](https://github.com/saicaca/fuwari).
> **Note:** This theme uses **Tailwind CSS v3** (not Tailwind v4). This is an intentional choice to maintain compatibility with the current configuration.
You can find the official Astro theme here:
https://astro.build/themes/details/a-static-photo-gallery-template-built-with-astro/
[**🖥️ Live Demo (Github Pages)**](https://codewithnemo.github.io/memori)
All images from Unsplash

## ✨ Features
- [x] Built with [Astro](https://astro.build) and [Tailwind CSS v3](https://tailwindcss.com) (Note: This theme uses Tailwind CSS v3, not Tailwind v4)
- [x] Smooth animations and page transitions
- [x] Light / dark mode
- [x] Customizable theme colors & banner
- [x] Responsive design
- [x] Photo gallery with timeline view
- [x] Image lightbox with [Fancybox](https://fancyapps.com/)
- [x] Cloudinary integration for image storage and optimization
- [x] Automatic image optimization and transformation
- [x] Gallery metadata (location, camera, date)
## 🚀 Getting Started
1. Clone this repository:
```sh
git clone https://github.com/codewithnemo/memori.git
cd memori
```
2. Install dependencies:
```sh
pnpm install
```
- Install [pnpm](https://pnpm.io) `npm install -g pnpm` if you haven't.
3. Set up Cloudinary:
- Sign up for a free account at [Cloudinary](https://cloudinary.com/)
- Get your Cloudinary credentials from the dashboard
- Create a `.env` file in the project root with the following variables:
```env
PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
```
Or use the `CLOUDINARY_URL` format:
```env
CLOUDINARY_URL=cloudinary://api_key:api_secret@cloud_name
```
4. Edit the config file `src/config.ts` to customize your gallery website.
5. Create a new gallery:
```sh
pnpm new-gallery <gallery-name>
```
This creates a gallery entry in `src/content/galleries/<gallery-name>/index.md`.
6. Upload images to Cloudinary:
- Add your images to a local folder (e.g., `galleries/<gallery-name>/`)
- Upload them to Cloudinary using the upload script:
```sh
pnpm upload-cloudinary <gallery-name>
```
Or upload all galleries:
```sh
pnpm upload-cloudinary
```
- Or upload manually via Cloudinary dashboard to the folder `galleries/<gallery-name>/`
7. Deploy your gallery to Vercel, Netlify, GitHub Pages, etc. following [the guides](https://docs.astro.build/en/guides/deploy/).
- Remember to set the Cloudinary environment variables in your deployment platform
- Edit the site configuration in `astro.config.mjs` before deployment
## 📝 Frontmatter of Galleries
Create a gallery by running:
```sh
pnpm new-gallery <gallery-name>
```
Or manually create a folder in `src/content/galleries/` with an `index.md` file:
```yaml
---
title: My Gallery Title
published: 2026-01-01
description: Description of this gallery
image: cover.jpg # Optional: cover image filename from Cloudinary (or leave empty to use first image)
location: "City, Country" # Optional
camera: "Canon EOS R5" # Optional
---
```
**Important:** Images are stored on Cloudinary, not locally. Upload images to Cloudinary in the folder `galleries/<gallery-name>/`. The gallery will automatically fetch and display all images from the corresponding Cloudinary folder.
### Uploading Images to Cloudinary
1. **Using the upload script (recommended):**
- Place your images in a local folder (e.g., `galleries/<gallery-name>/`)
- Run: `pnpm upload-cloudinary <gallery-name>` (or `pnpm upload-cloudinary` to upload all galleries)
- Images will be uploaded to Cloudinary with the correct folder structure
2. **Manual upload via Cloudinary Dashboard:**
- Upload images to Cloudinary
- Ensure they are in the folder `galleries/<gallery-name>/`
- The `public_id` should include the folder path (e.g., `galleries/gallery1/image.jpg`)
## ⚡ Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
|:------------------------------------------------|:----------------------------------------------------|
| `pnpm install` | Installs dependencies |
| `pnpm dev` | Starts local dev server at `localhost:4321` |
| `pnpm build` | Build your production site to `./dist/` |
| `pnpm preview` | Preview your build locally, before deploying |
| `pnpm check` | Run checks for errors in your code |
| `pnpm format` | Format your code using Biome |
| `pnpm new-gallery <name>` | Create a new gallery |
| `pnpm upload-cloudinary [name]` | Upload images to Cloudinary (optionally for a specific gallery) |
| `pnpm upload-cloudinary` | Upload all galleries to Cloudinary |
| `pnpm convert-heic` | Convert HEIC images to JPEG |
| `pnpm delete-heic` | Delete HEIC images |
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
| `pnpm astro --help` | Get help using the Astro CLI |
## 📄 License
This project is licensed under the MIT License.
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
