diff --git a/content/portfolio.md b/content/portfolio.md index f44acd0..5094fa4 100644 --- a/content/portfolio.md +++ b/content/portfolio.md @@ -1,45 +1,57 @@ -This lists some of the projects I've worked on that I'm most proud of, -especially personal projects and open source contributions. +This page lists the projects that I'm most proud of, and that I'm actively developing and supporting. -## Bulgur Cloud +### [Gandi Live Dns Rust ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/gandi-live-dns-rust) ![Docker Pulls](https://img.shields.io/docker/pulls/seriousbug/gandi-live-dns-rust)](https://github.com/SeriousBug/gandi-live-dns-rust) -[Bulgur Cloud](https://github.com/SeriousBug/bulgur-cloud) is a cloud storage and sharing solution, similar to Google Drive, -OneDrive, or NextCloud. Bulgur Cloud is lightweight and easy to self host: it -requires very little resources, comes with the user interface bundled into a -single executable, and requires no databases or external dependencies. +A dynamic DNS system that works with Gandi's live DNS feature. Allows you to +host servers without a static IP address by updating DNS records whenever your +IP changes. Flexible deployments through Docker or system packages with systemd +timers. -![A web page with 3 files listed, "sprite-fright.mp4", "test.txt", and "sprite-fright.LICENSE.txt". There are pencil and thrash bin symbols to the right of the file names. A leftward arrow is grayed out on the top left, and top right says "kaan". On the bottom right there's a symbol of a cloud with an up arrow.](https://bgenc.net/img/2022-03-29-00-16-13.png) +### [Cuttlestore ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/cuttlestore) ![Crates.io](https://img.shields.io/crates/d/cuttlestore)](https://github.com/SeriousBug/cuttlestore) -A demo is available at [bulgur-cloud.bgenc.net](https://bulgur-cloud.bgenc.net). -Please enter `test` for both username and password to log into the demo. The -demo is read only, so if you try to upload, rename, or delete anything you'll -get an error message. +A generic key-value storage library for Rust. Cuttlestore allows you to write +your code once and run it on many key-value stores. Right now it comes with +support for Redis and Sqlite, with planned support for CouchDB and DynamoDB. -Bulgur Cloud is free, open source software, licensed under AGPL-3.0. You can find the source code at [SeriosBug/bulgur-cloud](https://github.com/SeriousBug/bulgur-cloud), releases are available under the [releases tab](https://github.com/SeriousBug/bulgur-cloud/releases) as well as [DockerHub](https://hub.docker.com/r/seriousbug/bulgur-cloud). +### [Rust Embed for Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/rust-embed-for-web) ![Crates.io](https://img.shields.io/crates/d/rust-embed-for-web)](https://github.com/SeriousBug/rust-embed-for-web) -Bulgur Cloud's backend is written in Rust using the [Actix web framework](https://actix.rs/), and includes a RESTful API, a CLI management -tool, and a rich web application UI built with [React Native](https://reactnative.dev/), [Native Base](https://nativebase.io/), -[Redux](https://react-redux.js.org/), and [React Navigation](https://reactnavigation.org/). -There's also a HTML-only user interface that uses server rendered HTML templates for users without JavaScript. +Embed files into your Rust executable. You can embed HTML, CSS, JavaScript +files, all your assets into your server to bundle them together. This simplifies +updates as your assets are always guaranteed to update together with your server. -## gandi-live-dns +This started as a fork of an existing project, but became a significant rewrite +of it. It includes many features useful for web servers like precomputed header +values and precompressed file contents. -[gandi-live-dns](https://github.com/SeriousBug/gandi-live-dns-rust) is a system service (daemon) that automatically updates your IP -address on the domain provider Gandi's domain name servers, allowing you to host -web services without a static IP address. +### [Rust Embed Responder for Actix Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/actix-web-rust-embed-responder) ![Crates.io](https://img.shields.io/crates/d/actix-web-rust-embed-responder)](https://github.com/SeriousBug/actix-web-rust-embed-responder) -It features a simple configuration file, self rate limiting, self contained -[binary releases](https://github.com/SeriousBug/gandi-live-dns-rust/releases), -docker [images](https://hub.docker.com/r/seriousbug/gandi-live-dns-rust), -and systemd [service files](https://github.com/SeriousBug/gandi-live-dns-rust/tree/master/Packaging). +A sibling project to Rust Embed for Web, this is a responder for Actix Web that +efficiently serves your embedded files. It handles cache validation and content +type negotiation, and is built for high performance. -## Image Survey +### [Bulgur Cloud ![GitHub Repo stars](https://img.shields.io/github/stars/bulgur-cloud/bulgur-cloud) ![Docker Pulls](https://img.shields.io/docker/pulls/seriousbug/bulgur-cloud)](https://github.com/bulgur-cloud/bulgur-cloud) -[Image Survey](https://github.com/SeriousBug/image-survey) is a self hosted web service for doing qualitative image comparison -surveys. It can be used to do surveys where 2 image variants are compared -against each other or against an original. It's built for quick, anonymous surveys. +![](https://media.githubusercontent.com/media/bulgur-cloud/bulgur-cloud.github.io/main/static/img/homepage-screenshot.png) -![A web page with an image of a flower, repeated 3 times with differing levels of compression artifacts. Above the images are buttons to zoom and go back, and below are buttons to pick the left or right image.](https://github.com/SeriousBug/image-survey/raw/master/misc/screenshot-vote.jpg) +An easy to self host cloud file storage and sharing system. It's similar to Google Drive or NextCloud, but effortless to set up and maintain. Built in Rust and TypeScript, using Actix-Web and React Native. -It's built with a Python backend that serves a REST API, and a React frontend. -It uses an sqlite database to store the data, with hand-coded SQL queries. +### [live limit ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/live-limit) ![npm](https://img.shields.io/npm/dt/live-limit)](https://github.com/SeriousBug/live-limit) + +A TypeScript library that can limit the number of concurrent async operations +running at a time. This is useful for making concurrent requests to a server +without overloading your connection. Works with promises, has no dependencies, +and comes under 1kb minzipped. + +### [Query Method Middleware for Actix Web ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/actix-web-query-method-middleware) ![Crates.io](https://img.shields.io/crates/d/actix-web-query-method-middleware)](https://github.com/SeriousBug/actix-web-query-method-middleware) + +Actix Web middleware that allows you to submit HTML forms using methods other +than `POST`. Forms normally can only be submitted through `GET` or `POST` +methods, but this middleware reroutes requests using a query parameter to other +methods. + +### [Http Drogue](https://github.com/SeriousBug/http-drogue) ![GitHub Repo stars](https://img.shields.io/github/stars/SeriousBug/http-drogue) + +![](https://raw.githubusercontent.com/SeriousBug/http-drogue/main/pub/screenshot.png) + +A tiny self-hosted service to download files over http, with support for resuming and restarting failed downloads. +Built with Rust, basic HTML templates using Askama, TailwindCSS, and DaisyUI. Uses no javascript!