European Tech Opportunities 2027 Installation Guide¶
← Documentation hub · Configuration · CLI reference · Development guide · Open the opportunity directory
You do not need to install the project to browse internships. Use the live directory.
This is the canonical installation guide for the project. It covers local installation, database initialization, the first website launch, and basic verification. Runtime settings, production operation, and contribution procedures belong to their dedicated guides.
Requirements¶
| Tool | Version | Required for |
|---|---|---|
| Python | 3.12+ (CI baseline: 3.12) | Pipeline, CLI, tests, and migrations |
uv |
0.11.6 recommended | Locked Python environment and commands |
| Git | Current supported release | Repository checkout |
| Node.js | 22.13+ | Website builds and production-style local startup with unflagged node:sqlite support |
| Bun | 1.4.2 | Website dependency installation, tests, and development |
| GNU Make | Optional | Python validation shortcuts; direct uv commands are documented too |
| Docker | Current supported release | Documentation lint and optional container and deployment checks |
Confirm the required tools:
Docker is not required for ordinary local Python or website development, but the complete make check and make docs-site gates include the Docker-based documentation linters. Installation, local website development, and the default test paths require no LinkedIn access.
Clone the repository¶
git clone https://github.com/simonesiega/european-tech-opportunities-2027.git
cd european-tech-opportunities-2027
Run the remaining Python commands from the repository root unless a section explicitly changes directory.
Install the Python project¶
Install the exact locked development environment:
Create the local environment file.
Linux or macOS:
Windows Command Prompt:
Windows PowerShell:
The default configuration keeps LinkedIn collection disabled. Review the configuration guide before changing runtime values.
Initialize the local database¶
Create or upgrade the SQLite schema:
Verify that the search registry and database load:
The default database is created at:
A new local database intentionally contains no listings. Use the hosted directory for current public data.
Important
Do not render and commit the README preview from an empty local database. Exact projection rendering requires representative canonical state.
Run the website¶
Install the website dependencies:
Create the website environment file.
Linux or macOS:
Windows Command Prompt:
Windows PowerShell:
For local development, make sure site/.env.local uses the local origin:
SITE_URL=http://localhost:3000
OPPORTUNITIES_DATABASE_PATH=../data/opportunities.db
OPPORTUNITIES_PUBLIC_EXPORT_DIR=../data/exports
Start the development server:
Open:
The website reads SQLite and pipeline-generated public exports in read-only mode. An empty directory is valid when the local database contains no open listings; run uv run opportunities export-public from the repository root to create empty local CSV/JSON projections when testing the download routes.
After stopping the development server, return to the repository root:
Verify the installation¶
From the repository root, verify the Python project:
uv run opportunities --help
uv run opportunities stats
uv run pytest -m "not live and not performance"
Install Chromium once before running the complete website validation path:
Then verify the website:
bun run ci checks formatting, linting, strict TypeScript, the production Next.js build, Bun unit tests, Playwright browser behavior, and axe-core accessibility against a generated SQLite fixture.
The complete engineering validation matrix is documented in the development guide.
Docker¶
Docker is optional for local development and is not required to run either the Python project or the website directly.
For image builds, Compose services, volumes, permissions, local container access, and Dokploy deployment, use the Docker and deployment guide.