All notable changes to this project are tracked here.
-
Full rewrite in Python (Flask + SQLAlchemy) with the same feature set:
- Auth (login/logout), sign-up.
- CRUD for Books and Collections.
- Dashboard stats (per month, last month, yearly breakdown, avg price).
-
Database options you can pick from:
- SQLite (default, file
./data/app.sqlite3). - MariaDB/MySQL via
DATABASE_URL=mysql+pymysql://….
- SQLite (default, file
-
CSRF protection via Flask-WTF.
-
Modern UI/theme (Bootstrap 5, dark-mode templates).
- Swapped the Node/Express codebase for Python/Flask.
- Data layer now uses SQLAlchemy (no more MySQL-specific dialect needed).
-
Data migration:
- If you used SQLite before, you can recreate the tables 1:1 and move data over via script/export.
- For MariaDB/MySQL: create the DB, set
DATABASE_URL, start the app — it will create the tables automatically.
-
Environment:
.envnow usesSECRET_KEY,DATABASE_URL,ADMIN_SETUP_TOKEN.
- Made server startup more robust: explicit
app.listen(...), port checks, clean error logs. - Prevented the “silent exit” when there’s no startup block.
- Finally ported stats queries to SQLite (
strftime,extractequivalents); no MySQL functions anymore. - Helper
config/safeQuery.jsto debug SQL errors.
- SQLite backend as an integrated wrapper (
config/database.js) compatible withdb.query(...). - Sessions via
connect-sqlite3(./data/sessions.sqlite). - Security:
helmet, rate limiting. - Migrations (
scripts/migrate.js+db/schema.sql) without a demo user.
- Dashboard stats switched to SQLite-safe queries.
-
“Make first registrant an admin”:
- The very first registered user can tick a checkbox to become admin.
- Future admins only with
ADMIN_SETUP_TOKEN(from.env).
-
Updated views/routes for this (
routes/auth.js,views/register.ejs).
- Removed the demo user (no longer auto-created).
- Discord bot only starts if
DISCORD_TOKENis set (no more crash).
Internal consolidation release, foundation for the 4.x line.
- Cleaned up project structure and dependencies; prepped for SQLite.
- Improved logging/checks and startup procedure.
(Last published Node/Express version before 4.x)
- Management of Books and Collections (EJS views).
- Dashboard stats (Month/Last month/Year/Avg price).
- Discord bot with commands (release/utility commands).
- Reliance on MySQL-like date functions → SQLite incompatibilities.
- Bot would crash if the token was missing.
- No admin onboarding during first-time setup.
-
Pull the new codebase (Flask version).
-
Create
.envby copying and renaming.example.env:SECRET_KEY=replace-by-your-own-secret-key DATABASE_URL=sqlite:///data/app.sqlite3 # For MariaDB/MySQL: # DATABASE_URL=mysql+pymysql://user:password@localhost:3306/verlagdb ADMIN_SETUP_TOKEN=replace-by-your-own-secret-token