remarkbox
Project description
This is the codebase that powers both self-hosted & SaaS Remarkbox!
SaaS sites:
Self-hosted example running a custom theme:
What is RemarkBox?:
A stand alone question and answer site (forum) or an embedded comments or product reviews service. Works anywhere that supports HTML.
Project Goals
- Note:
These goals are not in priority order.
To be a suitable for:
question and answer sites (StackOverflow)
embedded comment system for static sites
forums
product review sections of e-commerce sites
To choose popular libraries instead of proper libraries, for example:
Github over Bitbucket (seriously considering GitLab)
Git over HG Mercurial
Jinja2 templates over Mako templates
Markdown over ReStructuredText
etc
Basically I have been burned too many times trying to pick the proper library or tool for the job, so this time around, I will make effort to choose solutions that the majority uses.
To be popular
To be safe from spammers
To be easy to manage and clean up spam if it happens
To be passwordless. Registration, verification and authentication happen via one-time-password codes sent via email.
To scale horizontally
To be multitenant
To have low friction for new users to join (posters and commenters)
To be engaging for users (posters and commenters)
To be search engine optimized
To have great test coverage
To be easy to create & load custom themes, similar to wordpress
Local Installation
We utilize a Makefile to capture targets for building a local Remarkbox environment. Please make sure you have make installed.
Review the make targets in the Makefile!
make dev
make test
make wsl
make prod
Functional testing environment
To setup a “functional testing” environment on your personal workstation, open two terminal shells.
In the first shell, run a copy of Remarkbox using:
make serve
In the second shell, run a “mock” simple HTTP web server to serve index.html:
make http
Now browse to http://127.0.0.1:8000 and index.html will load. This has an embedded copy of Remarkbox which is also running on localhost.
If you attempt to log in, a verification one-time-password code will be sent over SMTP to log in! If you do not have an SMTP server the socket error will log email to console when in development.
New Environments
If your deployment is brand new, you don’t need to run any migrations.
To create all the schemas & tables in your database, run these steps:
Activate the virtual environment:
source env/bin/activate
Create all the schemas & tables in your database
env/bin/remarkbox_init_db development.ini
You should however run this to stamp the database as ready:
alembic -c development.ini stamp head
SQL Migrations
Otherwise, it should be safe to run this at anytime to catch your database up:
alembic -c development.ini upgrade head
To look at the current revision and the history run these:
alembic -c development.ini history
alembic -c development.ini current
If you ever want to cut a new migration script, you can run this:
alembic -c development.ini revision -m "Added email_id column to User table."
Then you can edit / modify the generated .py file with your changes.
You can also autogenerate a new migration script using –autogenerate. Alembic will prepare a migration script by comparing the state of the database with the state of the model:
alembic -c development.ini revision --autogenerate -m "autogenerated indices."
You should review the recommended migration script before upgrade.
Below is a brief README section that explains how to set up a virtual environment in ~/remarkbox-env, create a data directory in ~/remarkbox-data (for your development.ini and SQLite file), and then run the development server using Waitress. It also lists the additional meta packages for production and testing.
Operating a server with Python packages instead of source
Create Your Virtual Environment and Data Directory:
python3 -m venv ~/remarkbox-env
mkdir -p ~/remarkbox-data
Create a config file
cd ~/remarkbox-data
wget "https://git.unturf.com/engineering/remarkbox/remarkbox/-/raw/main/development.ini"
Activate the Virtual Environment:
source ~/remarkbox-env/bin/activate
Install remarkbox Core and Development Extras (waitress server):
pip install remarkbox
pip install remarkbox[dev]
# optional themes.
pip install git+https://git.unturf.com/engineering/remarkbox/remarkbox-theme-meta.git
pip install git+https://git.unturf.com/engineering/remarkbox/remarkbox-westworld.git
Note: A plain `pip install remarkbox` automatically chooses between the Python‑3 or WSL requirements.
Create Database
remarkbox_init_db development.ini
alembic -c development.ini stamp head
Start the Development Server (Waitress):
pserve development.ini --reload
Additional Meta Packages: For production and testing, you can also install:
pip install remarkbox[prod]
pip install remarkbox[test]
Cleaning the homepage
Sometimes (all the times) it’s nice to clear all the test comments from the homepage of our marketing site. Use this query.
sqlite> UPDATE rb_uri SET data = "https://www.remarkbox.com/?cleaned=2018-09-28" WHERE data = "https://www.remarkbox.com/";
sqlite> SELECT * FROM rb_uri WHERE data LIKE "%https://www.remarkbox.com/?cleaned%";
1e631dd85d104555b41b300961d2f909|82008b2b178f4daab64c35ab5c5f9b56|https://www.remarkbox.com/?cleaned=2017-11-01
6b2a4772679611e8ad95040140774501|6b2a42ae679611e8ad95040140774501|https://www.remarkbox.com/?cleaned=2018-09-28
Looking up paying customers
SELECT * FROM rb_pay_what_you_can
INNER JOIN rb_user ON rb_user.id = rb_pay_what_you_can.user_id
WHERE amount > 0 and rb_user.stripe_id is not null;
Python Pyramid Shell
If you want to use an interactive Python interpreter to interact with the Remarkbox app/models and database:
pshell development.ini
Here is a full pshell script to modify every Node who has a Uri:
# begin the database transaction.
request.tm.begin()
# get all Uri objects.
uris = m.uri.get_all_uris(request.dbsession)
# iterate over all Uri objects.
for uri in uris:
# modify the Uri's related Node.
uri.node.has_uri = True
# add the related Node object to the sqlalchemy session.
request.dbsession.add(uri.node)
# flush / commit all changes stored the sqlalchemy session.
request.dbsession.flush()
# commit/close the database transaction to really make changes.
request.tm.commit()
Contributing
Establish communication with Russell or another admin to bless your git.unturf.com gitlab account & put you into the proper roles.
Russell should see your account request but due to spam you have to ask him directly for approval via email or some other means of comms.
Clone repo & make commits
Create merge requests, we automatically run the unit & headless functional tests on each commit
On merge we release to the production site & see the change across users.
Optionally, format your code.
This is not set in stone, but if you want to use a formatter this is the path for now!
- Python
black (manual)
- Jinja2
None (not needed, neither is an HTML formatter)
- JavaScript
Prettier or biome (manual)
- CSS
Prettier or biome (manual)
Licence
All code contributed goes into the public domain.
- Original Developer:
Russell Ballestrini (https://russell.ballestrini.net)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remarkbox-0.0.1111.tar.gz.
File metadata
- Download URL: remarkbox-0.0.1111.tar.gz
- Upload date:
- Size: 221.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42ec93d773fbc8cf717ffbc5f60de38aa2b78a1d752b32f987b33d38cffe2269
|
|
| MD5 |
18640cd04e74a939f81242db8135773d
|
|
| BLAKE2b-256 |
15fd567b62ad6857b0b72d0cb44d72be239640787d5a498caa3db68924822b5e
|
File details
Details for the file remarkbox-0.0.1111-py3-none-any.whl.
File metadata
- Download URL: remarkbox-0.0.1111-py3-none-any.whl
- Upload date:
- Size: 266.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7db2ec07fa131ab99f82884d7fed09f635580ebc53501e04a9b865bfa1ed211
|
|
| MD5 |
aab11752e033a60ba29b92e3ebdd3553
|
|
| BLAKE2b-256 |
6f8c7fff5d3a6a67473fd23e7a29eb38188f3d68f0ae439eff7a582b23e95a14
|