Skip to content

Repository files navigation

Pappol — personal blog

A minimal, fast, light/dark personal blog for Riccardo "Pappol" Parola, built with Astro and deployed free on GitHub Pages at https://pappol.github.io.

Public to read, only you can edit (you own the repo). Articles are plain Markdown.


Pages

  • Home (/) — photo, short bio, social links, 3 most-recent posts, GDPR email signup.
  • Blog (/blog) — every article, newest first.
  • About (/about).
  • Privacy (/privacy) — GDPR-compliant policy for the newsletter.
  • Plus a custom 404, an RSS feed (/rss.xml) and a sitemap.

Run it locally

npm install
npm run dev      # http://localhost:4321
npm run build    # output to ./dist
npm run preview  # preview the production build

Requires Node 18+ (Node 20/22 recommended).


Deploy to GitHub Pages (one-time setup)

  1. Create the repo on your account, named exactly Pappol.github.io (a user site → served at the domain root).
  2. Push this folder to the main branch:
    git init
    git add .
    git commit -m "Initial blog"
    git branch -M main
    git remote add origin https://github.com/Pappol/Pappol.github.io.git
    git push -u origin main
  3. On GitHub: Settings → Pages → Build and deployment → Source = GitHub Actions.
  4. The included workflow (.github/workflows/deploy.yml) builds and deploys on every push to main. First deploy takes ~1–2 min, then the site is live at https://pappol.github.io.

Write a new post

Create a Markdown file in src/content/blog/, e.g. my-post.md:

---
title: "My post title"
description: "One-line summary used on cards and meta tags."
pubDate: 2026-06-01
tags: ["ai", "data"]
# draft: true   # uncomment to hide from the site
---

Your content here…

The URL becomes /blog/my-post/. The home page automatically shows the 3 newest.


Embed music in a post (Spotify)

The <MusicEmbed> component drops a Spotify player into a post, framed to match the site (your border + radius, auto-following light/dark). To use a component the post must be MDX — save the file as .mdx instead of .md (everything else about the frontmatter is identical; existing .md posts are unaffected).

---
title: "Songs I wrote this to"
description: "A short note with a soundtrack."
pubDate: 2026-06-24
---

import MusicEmbed from '../../components/MusicEmbed.astro';

Here's the track that wouldn't leave my head:

<MusicEmbed url="https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT" caption="Bohemian Rhapsody — Queen" />
  • url (required) — any Spotify share link or URI: a track, album, playlist, artist, show, or episode. In Spotify, use Share → Copy link.
  • caption (optional) — small line of text under the player.
  • compact (optional, default true) — slim one-row player; set compact={false} for the tall artwork + tracklist player.
  • theme (optional, default "auto") — auto follows the site theme; force with "dark" / "light".

Things to fill in (search for TODO)

  • Your photo — drop it in public/images/ and update the src in src/pages/index.astro (look for profile-placeholder.svg). Update the About page too.
  • Home biosrc/pages/index.astro (hero-bio).
  • Aboutsrc/pages/about.md (photo + hobbies placeholders).
  • Privacy policysrc/pages/privacy.md (set the "Last updated" date; swap the Gmail for a dedicated address if you like).

Connect the email newsletter (GDPR)

The signup form is built GDPR-first: an explicit, non-pre-ticked consent checkbox, a link to the privacy policy, and copy that promises double opt-in. Out of the box it runs in demo mode (shows a confirmation, sends nothing).

To go live, use an EU-based, GDPR-friendly providerMailerLite is recommended (EU company, free tier, easy double opt-in):

  1. In MailerLite, create a subscribe form with double opt-in ON.
  2. Copy its POST endpoint into the ACTION constant at the top of src/components/EmailSignup.astro.
  3. Make sure the "Last updated" date and provider name in src/pages/privacy.md match reality.

A note on AWeber (the policy page you saw)

aweber.com/permission.htm is AWeber's own anti-spam permission reminder — it is not a privacy policy you can adopt as your own, and linking to it does not make you GDPR-compliant. As an EU resident you must publish your own privacy notice (the one in src/pages/privacy.md) and obtain explicit consent. AWeber is also US-based, so using it adds an international-data-transfer obligation (Standard Contractual Clauses). That's why MailerLite (EU) is the simpler, cleaner choice — but if you do use AWeber, the privacy policy already includes the SCC transfer wording.

The privacy policy is a solid template, not legal advice — give it a final read before publishing.

About

Small personal blog

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages