# Ephemere Project Guidelines This document contains project-specific instructions for working with the Ephemere codebase. ## Project Overview Ephemere is a collection of ephemeral scripts for various tasks, written in TypeScript, Python, and Bash. It contains utilities for: - S3 operations (upload, bulk upload, delete, content type correction) - Discord bot utilities - Discourse forum management - Gitea/GitHub operations - Security analysis tools - Music-related scripts - Cohort programme management (Python + Bash) - YubiKey SSH key and permission utilities (Bash) ## Project Structure ``` ephemere/ ├── typescript/ # TypeScript scripts │ └── src/ │ ├── s3/ # S3 operations (upload, delete, bulk operations) │ ├── discord/ # Discord bot and utilities │ ├── discourse/ # Discourse forum management │ ├── gitea/ # Gitea API interactions │ ├── github/ # GitHub API interactions │ ├── security/ # Security analysis tools │ ├── music/ # Music-related utilities │ └── utils/ # Shared utilities ├── python/ │ └── cohort/ # Cohort programme management scripts ├── bash/ │ ├── cohort/ # GitHub team management for cohorts │ └── yubikey/ # YubiKey SSH key and permission utilities ├── data/ # Input/output data files (gitignored) └── prod.env # 1Password vault references (safe to commit) ``` ## Development Standards ### TypeScript Scripts - All TypeScript scripts must follow Naomi's Node.js project standards - Use `@nhcarrigan/typescript-config` and `@nhcarrigan/eslint-config` - Run scripts using the interactive runner: `make run` (select TypeScript → category → script) - Interactive scripts should use `@inquirer/prompts` for user input ### Python Scripts - Use `uv` for package management - Linting and formatting with `ruff` - Scripts live in subdirectories of `python/` (e.g. `python/cohort/`) - Run scripts using the interactive runner: `make run` (select Python → category → script) ### Bash Scripts - Scripts live in subdirectories of `bash/` (e.g. `bash/cohort/`, `bash/yubikey/`) - Run scripts using the interactive runner: `make run` (select Bash → category → script) - Or run directly: `bash bash//