tatliHU / memewebsite

GNU General Public License v3.0
0 stars 0 forks source link

memewebsite

Multi-cloud meme website designed to opearate on ultra-low infra budget.

You will need

Planned features

Backend stack:

Configurable options

These are all configured as env vars:

Remote setup with Terraform

Local setup

Configure environment variables

You can use the presets for testing.

Start webserver

flask --app main run --debug

Setup a postgres database and execute SQL

CREATE USER atka WITH PASSWORD 'atka';
CREATE DATABASE meme WITH OWNER atka;
\c meme;
CREATE EXTENSION tsm_system_rows;
CREATE TABLE users (
    username VARCHAR(25) NOT NULL,
    password VARCHAR(32) NOT NULL,
    email VARCHAR(50) NOT NULL,
    admin BOOLEAN DEFAULT false,
    PRIMARY KEY (username)
);

CREATE TABLE posts (
    post_id SERIAL,
    title VARCHAR(50) NOT NULL,
    url VARCHAR(255) NOT NULL,
    published INT NOT NULL,
    username VARCHAR(25) NOT NULL,
    approver VARCHAR(25),
    approved BOOLEAN,
    tag_all BOOLEAN DEFAULT false,
    tag_emk BOOLEAN DEFAULT false,
    tag_gpk BOOLEAN DEFAULT false,
    tag_epk BOOLEAN DEFAULT false,
    tag_vbk BOOLEAN DEFAULT false,
    tag_vik BOOLEAN DEFAULT false,
    tag_kjk BOOLEAN DEFAULT false,
    tag_ttk BOOLEAN DEFAULT false,
    tag_gtk BOOLEAN DEFAULT false,
    FOREIGN KEY (username) REFERENCES users(username),
    FOREIGN KEY (approver) REFERENCES users(username),
    PRIMARY KEY (post_id)
);

CREATE TABLE votes (
    post_id INT NOT NULL,
    username VARCHAR(25) NOT NULL,
    vote SMALLINT NOT NULL CHECK (vote IN (-1, 1)),
    FOREIGN KEY (post_id) REFERENCES posts(post_id),
    FOREIGN KEY (username) REFERENCES users(username)
);

CREATE TABLE pending_registrations (
    email VARCHAR(40) NOT NULL,
    uuid VARCHAR(36) NOT NULL,
    username VARCHAR(25) NOT NULL,
    password VARCHAR(32) NOT NULL,
    Created INT NOT NULL,
    PRIMARY KEY (email)
);

GRANT ALL PRIVILEGES ON TABLE users TO atka;
GRANT ALL PRIVILEGES ON TABLE posts TO atka;
GRANT ALL PRIVILEGES ON TABLE votes TO atka;
GRANT ALL PRIVILEGES ON TABLE pending_registrations TO atka;
GRANT USAGE, SELECT, UPDATE ON SEQUENCE posts_post_id_seq TO atka;