Skip to content


Repository files navigation

Contributors Issues Apache 2.0 License



Go full-stack web app from scratch
Explore the docs »

View Demo · Report Bug · Request Feature

Table of Contents

  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgements

About The Project

go-maybe-list is a full-stack web application written in Go. It's written from scratch, without any pre-build web framework like Gin or Echo.

You can save links and ideas as "maybes" for later. Each maybe can have none or one to many tags.
You can either view all entries or only entries belonging to a tag.
If you update a maybe, tags will be dynamically added, updated or deleted.

I've deployed a demo (via GitOps/Gitlab CI) to a $5 Upcloud VPS (How?).

Sign up with a new account to test-drive the application (you can use a temporary email provider if you like).


  • custom web service framework/handler to isolate dependencies and improve error handling
  • middleware integration
  • SQL database support using SQLite (easy to swap out to a different SQL database)
  • no ORM, use of Go's standard database/sql library and jmoiron/sqlx
  • user authentication and authorization with sessions
  • profile view and change password
  • form validation
  • use of Docker, Docker Compose, Makefiles
  • vendoring dependencies with Modules, requires Go 1.12 or higher
  • Admin CLI with boilerplate templates to reduce repetitive copy/pasting.
  • responsive HTML and CSS without media queries
  • dark and light theme (via prefers-color-scheme)

Built With


  • Home Page Home Page

  • Signup/Register Register

  • Login (with flash message from previous successful signup) Login

  • Create a new entry Create

  • Validation errors Validation

  • Dark mode Dark mode

Getting Started

To get a local copy up and running follow these steps.


You'll need Go (Go 1.12 or later) and SQLite.


  1. Clone the repository.

    git clone
  2. Run database migrations.

    go run ./cmd/admin -action="migrate"
    go run ./cmd/admin -action="seed"
  3. Run web server. Default port is 4000, you can change it with a command line flag.

    go run ./cmd/web
    # go run ./cmd/web -addr=""

Alternatively, use the provided Makefile for convenience.


Register for a new account, sign in, and add new "maybes".


See the open issues for a list of proposed features (and known issues).


Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request


Apache 2.0 License, see LICENSE.


Sophia Brandt - @hisophiabrandt

Project Link: