Uncharted Pages is a Django-based web app for publishing short stories and blog posts, with a public site, blog discovery, newsletter subscriptions, and a book purchase flow.
- Home: Landing page with the site overview.
- About: Author background and inspiration.
- Contact: Inquiry and feedback form.
- Blogs: Blog list and details.
- FAQ: Frequently asked questions.
- Buy Book: Purchase and order flow.
- Python (Django 4.2)
- SQLite (default database)
- Pillow (image handling)
- python-dotenv (environment variables)
- Blog: Blog posts and categories.
- BookOrder: Book orders with payment receipt uploads.
- ContactUs: Contact form submissions.
- NewsletterSubscriber: Newsletter subscribers.
manage.py: Django entry pointunchartedpages/: project settings and root URLshome/: main app with views, models, and URLstemplates/: HTML templatesstatic/: CSS, JS, imagesdb.sqlite3: local database
Copy-friendly tree with right-side comments:
.
|-- .env # environment variables (not committed)
|-- db.sqlite3 # local SQLite database
|-- manage.py # Django entry point
|-- requirements.txt # Python dependencies
|-- draft-md.md # project documentation draft
|-- home/ # main Django app
| |-- __init__.py # app package
| |-- admin.py # admin registrations
| |-- apps.py # app config
| |-- context_processors.py # template context processors
| |-- models.py # database models
| |-- tests.py # app tests
| |-- urls.py # app routes
| |-- views.py # request handlers
| |-- migrations/ # Django migrations
| | |-- __init__.py # migrations package
| | `-- 0001_initial.py # initial schema
| `-- templatetags/ # custom template tags
| |-- __init__.py # templatetags package
| `-- custom_tags.py # custom tags/filters
|-- static/ # global static assets
| |-- css/ # site CSS
| | |-- about.css # about page styles
| | |-- blogpost.css # blog post styles
| | |-- blogs.css # blog list styles
| | |-- blogsearch.css # search styles
| | |-- buybook.css # buy book styles
| | |-- contact.css # contact styles
| | |-- faq.css # FAQ styles
| | `-- styles.css # global styles
| |-- img/ # site images
| `-- js/ # site JS
| |-- app.js # app scripts
| |-- jquery.min.js # jQuery
| |-- particles.min.js # particles lib
| |-- scripts.js # site scripts
| `-- tinyinject.js # tinyinject lib
|-- templates/ # Django templates
| |-- base.html # base template
| |-- admin/ # admin template overrides
| | |-- 404.html # admin 404
| | |-- base_site.html # admin base site
| | `-- base.html # admin base
| `-- home/ # app templates
| |-- about.html # about page
| |-- blogpost.html # blog post page
| |-- blogs.html # blog list page
| |-- blogsearch.html # blog search page
| |-- buybook.html # buy book page
| |-- contact.html # contact page
| |-- faq.html # FAQ page
| `-- index.html # home page
`-- unchartedpages/ # project configuration
|-- __init__.py # package init
|-- asgi.py # ASGI config
|-- settings.py # settings
|-- sitemaps.py # sitemap definitions
|-- urls.py # root URLs
`-- wsgi.py # WSGI config
Create a .env file in the project root with:
DJANGO_SECRET_KEY
- Set
DEBUGtoFalsefor production. - Configure
ALLOWED_HOSTSfor your domain(s). - Static files are served from
static/in development. - Media uploads are stored under
media/.
Root routes are defined in the project and home app:
/: Home page/about-us/: About page/blogs/: Blog list/blog-search/: Blog search/blog-post/<slug>/: Blog details/buy-book/: Book purchase form/contact-us/: Contact form/frequently-asked-questions/: FAQ/newsletter-subscriber/: Newsletter signup/admin/: Django admin/sitemap.xml/: Sitemap
-
Create and activate a virtual environment.
-
Install dependencies:
pip install -r requirements.txt
-
Set
.envvalues. -
Make migrations (if needed):
python manage.py makemigrations home
-
Run migrations:
python manage.py migrate
-
Create a superuser:
python manage.py createsuperuser
-
Start the development server:
python manage.py runserver
- Visit http://localhost:8000/admin
- Log in with your superuser credentials
- Add or edit posts under the
Blogsection
-
Set
DEBUGtoFalseand configureALLOWED_HOSTS. -
Set
DJANGO_SECRET_KEYin your environment. -
Collect static files:
python manage.py collectstatic
-
Configure media storage and backups.
-
Use a production-grade WSGI server (gunicorn/uwsgi) and a reverse proxy.
We welcome contributions. Suggested workflow:
-
Fork the repository.
-
Create a branch:
git checkout -b <branch_name>
-
Commit changes:
git commit -m "<commit_message>" -
Push:
git push origin <branch_name>
-
Open a pull request.
MIT License. See LICENSE for details.
Questions or feedback: roshis.awai@gmail.com
