A digital archive of the Landscape Architecture Film Series website from the early aughts
Note
ALL CONTENTS IN THIS REPO ARE FOR EDUCATIONAL PURPOSES ONLY.
- Description
- Target Users
- Features
- Project Structure
- Quick Start
- Local Setup
- Usage
- Production Setup
- System Administration
- Author(s)
- Version History
- Future Work
- License
- Contributing
- Acknowledgments
- Screenshots
LAFS serves as a digital archive for the website of the Landscape Architecture Film Series, a student-led initiative which I co-founded and co-curated for the Department of Landscape Architecture at the University of Illinois Urbana-Champaign in the early 2000s.
This repository preserves a sentimental piece of personal digital history. What would otherwise exist only as slowly disintegrating bits on a forgotten CD in a remote storage facility, as fragmented snapshots somewhere in the depths of the Internet Archive, or as a vaselined landscape in some province of collective memory hasβhere and at l-a-f-s.orgβbeen meticulously restored and recreated.
To learn how this project came about, check out LAFS-DEV.
LAFS is intended for:
- Self-guided learners seeking a reference implementation of modern backend web architecture powering a straightforward content website with simple navigation patterns.
- Landscape architecture students and faculty interested in the intersection of film and landscape studies.
- Cinema enthusiasts looking for a few good films to watch.
- π Historical Preservation - Faithful recreation of website from the early 2000s
- π Modern Dev Tooling - Implementation of a modern web architecture and software development practices
- π± Dynamic Responsiveness - Mobile-adjustable layout for today's wide range of devices
- π¬ Curated Film Database - Recreated collection preserving information about past screenings
- πΊοΈ Location Context - Google Maps integration for historical site reference
lafs/
β
βββ app/
β β
β βββ blueprints/
β β β
β β βββ main/
β β βββ __init__.py
β β βββ routes.py
β β βββ static/
β β βββ templates/
β β
β βββ config/
β β βββ __init__.py
β β
β βββ crud/
β β βββ __init__.py
β β
β βββ data/
β β βββ lafs.db
β β
β βββ infra/
β β βββ __init__.py
β β
β βββ utils/
β β βββ __init__.py
β β
β βββ app.py
β
βββ logs/
β
βββ assets/
βββ .gitignore
βββ LICENSE
βββ README.md
βββ requirements.txt
For those who want to get up and running quickly with default settings:
# Clone repository
git clone https://github.com/ggeerraarrdd/lafs.git
cd lafs
# Set up environment
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run app
cd app
flask run
# Navigate to the URL specified in the terminal outputBefore you begin, ensure you have met the following requirements:
-
Development Tools
- Python 3.12 (not tested on other versions)
- git (for cloning the repository)
-
Google Maps API Key
For the embedded maps to work, you need to set up a Google Maps API Key. Before you can create one, you will need to create a Google Cloud project, for which you need a Google Cloud account.
- See
requirements.txt
-
Clone the repository
git clone https://github.com/ggeerraarrdd/lafs.git cd lafs -
Set up a Python virtual environment
python3 -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
-
Install the dependencies
pip install --upgrade pip pip install -r requirements.txt
-
Create an
.envfilePlace the file in the root directory and add the following as default:
# Database Path DATABASE_NAME='data/lafs.db' # Database Connection Pool POOL_SIZE=5 MAX_OVERFLOW=10 POOL_TIMEOUT=30 POOL_RECYCLE=-1 ECHO=False # Custom Database Retry Settings MAX_RETRIES=3 BASE_DELAY=1 MAX_DELAY=10 # Logging IS_LOGGING=False # Flask Secret Key SECRET_KEY='192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' # Google Maps API Key MAP_API_KEY='your_map_api_key'
-
Database Options Explained
DATABASE_NAME- path to SQLite database fileSQLAlchemy Engine/Connection Pool Parameters:
POOL_SIZE- max number of persistent connectionsMAX_OVERFLOW- max number of connections above POOL_SIZEPOOL_TIMEOUT- seconds to wait for available connectionPOOL_RECYCLE- seconds before connection is recycledECHO- enable SQLAlchemy engine logging
Custom Retry Mechanism Parameters:
MAX_RETRIES- max retry attempts for failed operationsBASE_DELAY- initial delay between retries in secondsMAX_DELAY- max delay between retries in seconds
-
Logging Option Explained
The logging functionality can be controlled through
IS_LOGGING:IS_LOGGING=False
When logging is enabled (IS_LOGGING=True):
- Log files are created and stored in the logs/ directory at the root of the project.
- SQL query execution times, transaction status and errors are tracked.
- Each log entry includes the calling function name for better traceability.
-
Flask Secret Key Option Explained
From Flask's official documentation: A secret key that will be used for securely signing the session cookie and can be used for any other security related needs by extensions or your application. It should be a long random bytes or str. For example, copy the output of this to your config:
$ python -c 'import secrets; print(secrets.token_hex())' '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
The above is the system default and should only be used for local development. You can generate a new one using the
secretsmodule from the Python standard library or using your preferred method.
-
Go into the
appdirectory and run the command:flask run
-
Open the film series website
Navigate to the URL specified in the terminal output. For example:
* Running on http://127.0.0.1:5000
- TBD
- TBD
The original website is archived on the Internet Archive.
- Go to Issues and filter for the
enhancementlabel.
This project is not accepting contributions at this time. It is intended solely for personal learning and exploration. However, feel free to clone the repository and use it as a learning resource.
- The distribution code for CS50's Finance pset served as a template for the app.
(Image created using Portfoliofy.)
Landscape Architecture Film Series. (2002). Screenshot of website [Digital image]. Captured 2023. Retrieved from https://l-a-f-s.org




