{"id":15137068,"url":"https://github.com/fachschaftmathphysinfo/pepp","last_synced_at":"2025-10-23T12:30:21.498Z","repository":{"id":247068680,"uuid":"814853969","full_name":"FachschaftMathPhysInfo/pepp","owner":"FachschaftMathPhysInfo","description":"Vorkursverwaltungstool","archived":false,"fork":false,"pushed_at":"2024-12-09T13:50:08.000Z","size":3311,"stargazers_count":1,"open_issues_count":16,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-30T18:47:47.395Z","etag":null,"topics":["gqlgen","graphql","nextjs","opentelemetry","university","vorkurs"],"latest_commit_sha":null,"homepage":"https://fachschaftmathphysinfo.github.io/pepp/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FachschaftMathPhysInfo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-13T21:08:00.000Z","updated_at":"2024-12-09T13:50:12.000Z","dependencies_parsed_at":"2024-09-21T11:02:04.793Z","dependency_job_id":"1f8abed3-8af0-403d-9cec-3dcfc356bc70","html_url":"https://github.com/FachschaftMathPhysInfo/pepp","commit_stats":{"total_commits":93,"total_committers":4,"mean_commits":23.25,"dds":"0.22580645161290325","last_synced_commit":"d399e26c7881f5ded4780c4e0550fe8062584e09"},"previous_names":["fachschaftmathphysinfo/pepp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FachschaftMathPhysInfo%2Fpepp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FachschaftMathPhysInfo%2Fpepp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FachschaftMathPhysInfo%2Fpepp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FachschaftMathPhysInfo%2Fpepp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FachschaftMathPhysInfo","download_url":"https://codeload.github.com/FachschaftMathPhysInfo/pepp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237821776,"owners_count":19371827,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gqlgen","graphql","nextjs","opentelemetry","university","vorkurs"],"created_at":"2024-09-26T06:43:14.712Z","updated_at":"2025-10-23T12:30:21.494Z","avatar_url":"https://github.com/FachschaftMathPhysInfo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/FachschaftMathPhysInfo/pepp\"\u003e\n    \u003cimg src=\"frontend/public/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003ePepp\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    A software to organize preparatory courses at universities.\n    \u003cbr /\u003e\n    \u003ca href=\"https://vorkurs.mathphys.info\"\u003e\u003cstrong\u003eExplore a live version »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/FachschaftMathPhysInfo/pepp/issues/new?labels=bug\u0026template=bug-report---.md\"\u003eReport Bug\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/FachschaftMathPhysInfo/pepp/issues/new?labels=enhancement\u0026template=feature-request---.md\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Getting started\n\u003e [!CAUTION]\n\u003e For development and testing purposes, SQLite is supported as DB-System. However, in production please use Postgres as we only support this for DB-migrations. You will get no updates otherwise, or break your system. To use SQLite just don't provide Posgres connection environment variables.\n### Deployment via docker-compose\n```bash\nvolumes:\n  data:\n\nservices:\n  pepp:\n    image: ghcr.io/fachschaftmathphysinfo/pepp:latest\n    ports:\n      - 8080:8080\n    env_file: .env\n    depends_on:\n      - postgres\n  postgres:\n    image: postgres:15.6-alpine\n    volumes:\n      - data:/var/lib/postgresql/data\n    env_file: .env\n```\n### (optional) Configuring mTLS with Postgres\n1. You need the files `gen_certs.sh`, `postgresql.conf` and folder `tls` from this repositorys root\n2. Run `./gen_certs.sh`\n3. Deploy with provided keys:\n```bash\nvolumes:\n  data:\n\nservices:\n  pepp:\n    image: ghcr.io/fachschaftmathphysinfo/pepp:latest\n    volumes:\n      - ./tls/certs/root.crt:/app/root.crt:ro\n      - ./tls/certs/client.crt:/app/server.crt:ro\n      - ./tls/certs/client.key:/app/server.key:ro\n    ports:\n      - 8080:8080\n    env_file: .env\n    depends_on:\n      - postgres\n  postgres:\n    image: postgres:15.6-alpine\n    volumes:\n      - data:/var/lib/postgresql/data\n      - ./postgresql.conf:/etc/postgresql/config/postgresql.conf:ro\n      - ./tls/certs/root.crt:/etc/postgres/security/root.crt:ro\n      - ./tls/certs/server.crt:/etc/postgres/security/server.crt:ro\n      - ./tls/certs/server.key:/etc/postgres/security/server.key:ro\n    command: -c config_file=/etc/postgresql/config/postgresql.conf\n    env_file: .env\n``` \n\u003e [!IMPORTANT]\n\u003e After initial startup run `docker compose exec pepp pepp db init` and `docker compose exec pepp pepp db mark_applied`\n\n## Environment Variables\n\n### Required for Production environment\n| Key | Description | Example |\n| - | - | - |\n| `PUBLIC_URL` | Domain under which pepp is deployed | `https://pepp.example.com` |\n| `PEPPER_KEY` | Generate a random 32 characters long string for password security | - |\n| `SMTP_HOST` | E-Mail provider | `smtp.example.com` |\n| `SMTP_USER` | The user to log into the SMTP Server | `alice@example.com` |\n| `SMTP_PASSWORD` | The password to log into the SMTP Server | - |\n| `SMTP_PORT` | The port of your SMTP Server | `465` |\n| `FROM_ADDRESS` | Address from which mails are send | `vorkurs@example.com` |\n| `POSTGRES_HOST` | When given tries to connect. Creates a SQLite per default | `postgres` |\n| `POSTGRES_PASSWORD` | Required if `POSTGRES_HOST` is given | `a string password` |\n| `POSTGRES_PORT` | Required if `POSTGRES_HOST` is given | `5433` |\n| `POSTGRES_USER` | Required if `POSTGRES_HOST` is given | `postgres` |\n| `POSTGRES_DB` | Required if `POSTGRES_HOST` is given | `postgres` |\n\n### optional\n\n| Key | Description | Example |\n| - | - | - |\n| `LOG_LEVEL` | Default is `Info`. Set to `Debug` for more information | `Debug` |\n| `LOCALE` | Default is `UTC`. This affects mainly the events exported as ICS which get converted. | `Europe/Berlin` |\n| `ENV` | Set to `Production` on deployment | `Production` |\n| `ENABLE_TRACING` | Application exports traces to an OpenTelemetry Collector | `true` |\n| `ADMIN_USER` | Default is `admin@pepp.local`. Generated on initial startup | `admin@example.com` |\n| `OIDC_LOGIN_PROVIDER_URL` | When given, initializes an Open ID Endpoint at `/sso/oidc` | `https://auth.example.com` |\n| `OIDC_LOGIN_CLIENT_ID` | Required if `OIDC_LOGIN_PROVIDER_URL` is given | `pepp` |\n| `OIDC_LOGIN_CLIENT_SECRET` | Required if `OIDC_LOGIN_PROVIDER_URL` is given | `insecure_secret` |\n| `OIDC_LOGIN_SCOPES` | Required if `OIDC_LOGIN_PROVIDER_URL` is given | `openid profile email groups` |\n| `OIDC_LOGIN_CLAIM_MAPPING` | Required if `OIDC_LOGIN_PROVIDER_URL` is given. Map single name strings to `name` and splitted to `fn` and `sn` | `'{\"mail\":\"email\",\"name\":\"name\",\"groups\":\"groups\"}'` |\n| `OIDC_LOGIN_ADMIN_GROUPS` | User groups which will automatically get admin rights. | `vorkurs-orga root` |\n\n\u003e [!NOTE]\n\u003e When configuring your OIDC-Provider, remember to set the callback uri to `https://\u003cyour PUBLIC_URL here\u003e/sso/oidc/callback`.\n\n\n## Development\n### Build\n```bash\ncp .env .env.local\ndocker compose build\ndocker compose up -d \u0026\u0026 docker compose logs -f\n```\n\n- Frontend: [localhost:8080](http://localhost:8080)\n- ICal Calendar: [localhost:8080/ical](http://localhost:8080/ical)\n- API: [localhost:8080/api](http://localhost:8080/api)\n- GraphQL Playground: [localhost:8080/playground](http://localhost:8080/playground)\n\n#### Frontend\n```bash\ncd frontend\nnpm i\nnpm run codegen\nnpm run dev\n```\n\n#### Backend\n\u003e [!IMPORTANT]  \n\u003e In development, the backend creates some example data and creates an admin user:\n\u003e Mail: `admin@pepp.local`, \n\u003e Password: `admin`\n```bash\ncd server\ngo generate ./...\ngo run server.go\n```\n\n## Contributions\n1. [create an issue](https://github.com/FachschaftMathPhysInfo/pepp/issues/new)\n2. from this issue create a branch and work on it\n3. create a pull request and tag one of the main contributors for a short review\n4. sanfter Schulterklopfer ♡\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffachschaftmathphysinfo%2Fpepp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffachschaftmathphysinfo%2Fpepp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffachschaftmathphysinfo%2Fpepp/lists"}