Skip to content
Personal blog homepage
F# Other
  1. F# 99.2%
  2. Other 0.8%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


This is Blog website for personal usage. Currently, frontend styling is written for my personal blog. Maybe in the future I might add support for custom themes, and general blog generator features.

If you want to run this project yourself, feel free, just keep the following in mind.

Firstly, you need to register an OAuth application in Github to be able to authenticate to allow upserting blog posts. The actual upsert page is under /articles/upsert/0. Use 0 to add a new post, or any ID to update a post.

Secondly, when you first run the server, it will throw empty list exceptions, because it is searching for posts in the database. I will eventually add graceful error handling for that event, but not yet. When this happens, you can still navigate to the upsert page (/articles/upsert/0), and write your first post. Then the server should be able to serve your posts as normal.

When adding or updating a post, you can add any number of Tags. To do this, you can simply click the Tag label on the upsert page, and a new input field will appear.

This site supports a commenting system powered by Commento, and if you want to run your own site, make sure to replace the URL of where commento is hosted in src/App/Views/Article.fs.

Running locally


  • postgres
  • .Net Core 3.x

You will need to generate a self signed certificate for local development. Example guide here:

You will also need to set several configuration options, either in the appsettings.json, your environment variables, or using dotnet user-secrets as detailed here. They are:

  • ConnectionString: The postgres connection string
  • GithubClientId: The client ID from your github OAuth application
  • GithubClientSecret: The client secret from your github OAuth application
  • GithubWriteUsername: The github username that is authorized to write blog posts (I know, shouldn't use OAuth for authorization. This also only allows a single account to write posts...)

Ideally, you should be able to simply run dotnet build, and dotnet run. It installs paket and fake-cli as local tools and they should be good to go out of the box.

Building a docker container

This is where the fake build script comes into play. fake build will read the latest version from and build a docker container with that version as the tag. The build script requires your docker username as the environment variable USERNAME, with which it will tag the docker image

You can’t perform that action at this time.