DOSAYGO Studio

Fully Hosted: GitHub-Powered Guestbook

By Cris, April 28, 2025

Hosting a web app typically demands costly servers, a barrier for small projects. I bypassed this with Fully Hosted, a guestbook app entirely on GitHub, using GitHub Actions and SQLite for the database and GitHub Pages for HTML. In the web’s bustling marketplace, Fully Hosted is a cozy inn, welcoming visitors to leave their mark without a penny spent.

Messages are stored in an SQLite database via GitHub Actions, fetched and displayed on a static page using sql.js, making the app free and serverless.

# GitHub Action workflow to store messages
name: Update Guestbook Database
on:
  workflow_dispatch:
    inputs:
      name:
        required: true
      message:
        required: true
jobs:
  update-db:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Insert guestbook entry
        run: |
          sqlite3 data.db "CREATE TABLE IF NOT EXISTS guestbook (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, message TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);"
          sqlite3 data.db "INSERT INTO guestbook (name, message) VALUES ('$NAME', '$MESSAGE');"
        env:
          NAME: ${{ inputs.name }}
          MESSAGE: ${{ inputs.message }}

This workflow stores messages in SQLite, while the client renders them:

async function displayMessages() {
  const response = await fetch('data.db');
  const buffer = await response.arrayBuffer();
  const db = new SQL.Database(new Uint8Array(buffer));
  const result = db.exec("SELECT * FROM guestbook");
  renderMessages(result);
}

Fully Hosted’s charm is its accessibility, inviting all to participate without server costs.

Fully Hosted interface: a cozy inn guestbook on a wooden table, with a GitHub logo in the background

Creating Fully Hosted was like opening a roadside tavern, offering warmth without cost. At DOSAYGO, we champion accessibility, building tools that invite everyone to the table. Fully Hosted is a welcoming space, a digital guestbook where stories are shared freely.