New Website Section: Quick Reviews!

by Matt Fantinel
20 Jul 2025 - 5 min read

For a little over a year, I’ve been writing quick reviews of movies and TV shows I’ve watched. I was inspired by Matt Birchler on Mastodon and his own Quick Reviews web app, and while I initially used his app to write my own and post to social media, I decided to give my reviews a home in here.

So, after gathering my reviews as Markdown files in Obsidian, they’re now in a new section here. Meet Quick Reviews!

The review cards are not images, but just web elements like everything else. Which means they are responsive and lightweight. I made it as easy as possible to publish them on my side, and there’s even a download button to allow me to quickly post them to social media!

The Technical Part

If you’re interested in how I made it work, it’s actually not that complicated.

This website already uses Markdown files for the blog posts, and since it uses Astro, fetching data for the Quick Reviews was as easy as declaring a new Content Collection, pointing to the right folder, and declaring its schema. It will all make sense in a bit.

Data Schema

First of all, I needed to define what a review would look like. Its main pieces of information are the movie/show's name, the rating, and the content of my review. Some metadata is also nice to help tidy things up, like the date I reviewed it, the year the movie came out, and who the director was.

In Markdown, this kind of data is all part of the file's Frontmatter, a special section at the top of the file. The only exception would be the review's content, which is just pure Markdown, right below the frontmatter. It looks like this:

markdown
---
type: (movie/tv show)
metadata: (year, director, etc)
image: (movie poster)
rating: (my rating)
date: (when I reviewed it)
---

(what I have to say about it)

With just that, I'm able to display it however I want on my site. I added two extra properties that are specific to how I want to display them on my website: theme, with a light an dark option that mainly control the color of the text, and customBg, which allows me to set any color I want as the background.

On the Astro side of things, I declared this same schema, so Astro knows what data to look for:

typescript
import { z } from 'astro:content';
import { QuickReviewRating, QuickReviewType } from './quick-review-types'; // These are enums that match to what's in Obsidian

export const quickReviewSchema = z.object({
	type: z.enum([QuickReviewType.Movie, QuickReviewType.TvShow, QuickReviewType.Game, QuickReviewType.Album]),
	metadata: z.string().optional().nullable(),
	image: z.string().optional().nullable(),
	rating: z.enum([QuickReviewRating.DidntLikeIt, QuickReviewRating.Decent, QuickReviewRating.LikeIt, QuickReviewRating.LovedIt]),
	date: z.coerce.date(),
	theme: z.enum(['dark', 'light']),
	customBg: z.string().optional().nullable()
});

And then, on content.config.ts, I used that schema in my new Content Collection:

content.config.ts
typescript

import { quickReviewSchema } from "@schemas/quick-review";

const quickReviews = defineCollection({
	loader: glob({ pattern: "**/*.md", base: "./public/cms/quick-reviews" }),
	schema: quickReviewSchema
});

export const collections = { quickReviews };

And with that, I can already use Astro's getCollection to fetch and use that data however I want!

Saving reviews

This system is only as good as its ease of adding new reviews to. If adding reviews is too much of a hassle, then my lazy self will just stop doing it.

Obsidian has a built-in Template feature that allows you to quickly add a pre-set structure to a file, like the Frontmatter above. That already makes it better, since I can just create a file, apply the template, and just fill the missing fields. However, some steps were particularly annoying.

Finding a movie's image, year and director usually required either a web search or opening its page in IMDB. That's not really a big deal, but it's still annoying to have to make that trip every time I want to write something.

Luckily, Obsidian has a gigantic ecosystem of plugins that can fill any possible niche. There is a community plugin called QuickAdd that adds a bunch of possibilities to templates. And, guess what, the plugin author even has an example of how to setup a template that automatically grabs info from IMDB into a note! I just followed the guide for the Movie & Series script and, voilà, I could have that info in my Quick Reviews in seconds!

I didn't need all that data on my quick reviews, so I just added the ones I needed to my template. The end result looks like this:

quick-review-template.md
markdown

---
type: "{{VALUE:type}}"
metadata: "{{VALUE:Year}}, {{VALUE:director}}"
image: "{{VALUE:Poster}}"
rating: 
date: ""
theme: dark
customBg:
---

And this is what the flow looks like:

Screen recording showing the flow of adding a new review in Obsidian. I use a keyboard shortcut to invoke the Quick Review dialog, type in "Kill Bill", select Kill Bill 2, and write that it's pretty good, setting the rating to "I like it"

Future Plans

Honestly, I don't want this section to be complicated at all. It is above all a place to dump my thoughts about specific pieces of media on. I added some quick filtering for media type, but that's it. I might revisit the layout of the reviews at some point and maybe add a special RSS feed for them, but besides that, I think I'm done.

Let me know if there's anything you think would be cool, though. As long as it's fun, I'm not opposed to it!

Written by

Matt Fantinel

I’m a web developer trying to figure out this weird thing called the internet. I write about development, the web, games, music, and whatever else I feel like writing about!

About

Newsletter? I have it!

I have a newsletter as another way to share what I write on this blog. The main goal is to be able to reach people who don't use RSS or just prefer getting their articles delivered straight into their inbox.

  • No fixed frequency, but at least once at month;
  • I do not plan on having content exclusive to the newsletter. Everything on it will also be on the blog;
  • I will never, ever ever ever, send you any form of spam.

You might also like

View blog

One Feed to Rule Them All

2 min read

And in my website bind them

Meta
Read

A new home for Cool Links

2 min read

Or more of a new room in the same home, I guess

Meta
Read

Fantinel.dev v5 is here!

10 min read

Out with the green waves, in with the rainbow of pastel colors!

Meta
Read