Inspired by amazing NetNewsWire Mac/iOS app – the best RSS reader out there!
🏗️The app is in very early stage of development.🚧
Main branch is auto-deployed at http://rss.hazadus.ru/.
- Django
- django-allauth: Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication.
- django-debug-toolbar: Best debugging tool for Django.
- Celery: simple, flexible, and reliable distributed system to process vast amounts of messages, while providing operations with the tools required to maintain such a system.
- RabbitMQ: most widely deployed open source message broker.
- Feed Parsing:
- feedparser: Universal Feed Parser is a Python module for downloading and parsing syndicated feeds.
- beautifulsoup4: Beautiful Soup is a library that makes it easy to scrape information from web pages.
- dateutil: The dateutil module provides powerful extensions to the standard datetime module, available in Python.
- Serving App in Production:
- gunicorn: WSGI HTTP Server for UNIX, fast clients and sleepy applications.
- whitenoise: Radically simplified static file serving for Python web apps.
- nginx: nginx (engine x) is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.
- Styling:
- Tailwind CSS
- @tailwindcss/typography: Beautiful typographic defaults for HTML you don't control.
- Tailwind CSS
- Misc:
- environs:
environs
is a Python library for parsing environment variables. - coloredlogs: The coloredlogs package enables colored terminal output for Python’s logging module.
- coverage: Coverage.py measures code coverage, typically during test execution.
- environs:
Create .env
file with the following variables:
SECRET_KEY=django-secret-key
DEBUG=True
DB_NAME=postgres
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432CELERY_BROKER_URL=amqp://rmuser:rmpassword@localhost:5672//
Containers db
, mq
should be up and running in background.
Use celery -A django_project worker -E
to start the worker.
Use make run
to start the app.
Create .env
file with the following variables:
SECRET_KEY=django-secret-key
DEBUG=False
SENTRY_DSN=sentry-dsn-only-in-production-(optional)
Use docker compose up -d
to run the app.
npx tailwindcss -i ./static/src/input.css -o ./static/styles.css
# or
npx tailwindcss -i ./static/src/input.css -o ./static/styles.css --watch
# Create fresh DB
python -m manage migrate
# Create test users with subscriptions
python -m manage add_test_data
# Fetch feeds for test users
python -m manage update_feeds
#
# Mark some stuff as read, some as favorite...
#
# Dump all data to fixtures
make dumpdata
- Advanced Logging Tutorial
- Using WhiteNoise with Django
- Whitenoise - Add compression and caching support
- Whitenoise - Why do I get “ValueError: Missing staticfiles manifest entry for …”?
- Tailwind CSS Django - Flowbite
- MDN: scrollIntoView() method
- MDN: Navigator: share() method:
navigator.share()
will only work when app is served via HTTPS. - Django - Understand cached attributes: Long story short – use
all()
on queryset whenever you need to avoid queryset caching to get correctcount()
results. Took me half a day to figure this out. - Capturing Only Unhandled Exceptions with Sentry in Python
- Respectfully Requesting RSS Feeds with Python