A comprehensive digital orientation platform for freshmen at the Technische Hochschule Ingolstadt (THI). This interactive web application provides virtual city and campus tours, study guides, and an engaging scavenger hunt to help new students get familiar with their university and surroundings.
- Campus Tour: Interactive maps with video content showcasing university buildings and facilities
- City Tour: Explore Ingolstadt and Neuburg with location-based multimedia content
- MapLibre GL integration for smooth, responsive map experiences
- Campus Navigation: Building layouts, room finding, and facility information
- Study Life: Academic procedures, important dates, and university regulations
- Student Life: Dining options, recreational activities, and student organizations
- Glossary: A-Z guide of important terms and concepts
- QR Code-based gameplay: Scan codes around campus to earn points
- Interactive quizzes: Answer questions about locations for bonus points
- Progress tracking: Real-time score updates and leaderboards
- Offline storage: Uses IndexedDB for persistent progress tracking
- German and English content support
- Internationalization-ready architecture
- Responsive design: Works seamlessly on desktop and mobile devices
- Progressive Web App: Can be installed on mobile devices
- Dark/Light theme: Automatic theme switching based on user preference
- Accessibility: Built with accessibility best practices
- Frontend: Next.js 14 with TypeScript
- Styling: Tailwind CSS with custom design system
- UI Components: Radix UI primitives with custom styling
- Maps: MapLibre GL for interactive mapping
- Data Storage: IndexedDB for client-side persistence
- Build Tool: Bun for fast package management and builds
- Deployment: Docker with standalone output
βββ components/ # Reusable UI components
β βββ guide/ # Guide-specific components
β βββ map/ # Map-related components
β βββ tour/ # Tour functionality
β βββ ui/ # Base UI components
βββ data/ # Content data (JSON files)
β βββ guide/ # Study guide content
β βββ scavenger/ # Scavenger hunt locations (Markdown)
β βββ tour/ # Tour locations and multimedia
βββ lib/ # Utility functions and data processing
βββ pages/ # Next.js pages and API routes
βββ public/ # Static assets
βββ styles/ # Global CSS styles
-
Clone the repository
git clone https://github.com/neuland-ingolstadt/ersti-hilfe-kit.git cd ersti-hilfe-kit -
Install dependencies
bun install
-
Start development server
bun dev
-
Open your browser Navigate to http://localhost:3000
bun run dev # Start development server
bun run build # Build for production
bun run start # Start production server
bun run lint # Run TypeScript and Biome checks
bun run fmt # Format code with BiomeCreate a .env.local file for development:
NEXT_PUBLIC_NEULAND_GRAPHQL_ENDPOINT=https://api.neuland.app/graphql
NEXT_PUBLIC_APTABASE_KEY=your_aptabase_key
SCAVENGER_HUNT_DISABLED=falseThe application is designed for containerized deployment with Docker:
# Build and run with Docker
docker build -t ersti-hilfe-kit .
docker run -p 3000:3000 ersti-hilfe-kitFor production deployment with Traefik:
version: "3"
services:
app:
build:
context: ./ersti-hilfe-kit
dockerfile: Dockerfile
restart: always
init: true
environment:
- TZ=Europe/Berlin
- NEXT_PUBLIC_NEULAND_GRAPHQL_ENDPOINT=https://api.neuland.app/graphql
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.ophase.rule=Host(`ersti.neuland.app`)"
- "traefik.http.routers.ophase.entrypoints=https"
- "traefik.http.routers.ophase.tls=true"
- "traefik.http.routers.ophase.tls.certresolver=le"
networks:
web:
external: true-
Add video content to your CDN/storage
-
Generate poster images:
for i in *.mp4; do ffmpeg -i "$i" -vframes 1 -vf scale=1280:720 "../poster/$(basename "$i" .mp4).jpg"; done
-
Update
data/tour/[city].jsonwith new locations
-
Create markdown files in
data/scavenger/ -
Include frontmatter with points and questions:
--- heading: "Location Name" points: 10 questions: - id: "q1" points: 5 question: "What year was this building constructed?" answer: ["1995", "nineteen ninety-five"] --- # Location Description Your location content here...
For optimal performance, transcode videos to web-friendly formats:
# Transcode videos to H.264 720p
for i in *.mp4; do
ffmpeg -i "$i" -c:a copy -c:v libx264 -vf scale=1280:720 "../web/$i"
doneWe welcome contributions from the community! Whether you're a student, faculty member, or developer, there are many ways to help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Content: Add or update study guides, tour locations, and scavenger hunt challenges
- Translations: Help translate content to additional languages
- Features: Implement new functionality or improve existing features
- Bug Fixes: Report and fix issues
- Documentation: Improve documentation and add examples
- Follow the existing code style (enforced by Biome)
- Write meaningful commit messages
- Test your changes thoroughly
- Update documentation as needed
Developed by:
- Fachschaft Informatik THI - Student representatives for Computer Science
- Neuland Ingolstadt e.V. - Student organization for digital innovation
Inspired by:
- Fachschaft Wiwi, University of GΓΆttingen - Campus tour concept
- StuV OTH Regensburg - Study guide structure
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE.md file for details.
Important
Content Licensing: The /data folder containing educational content, images, and multimedia is not covered by the AGPL-3.0 license and may have separate licensing terms.
We chose AGPL-3.0 to ensure that:
- The software remains open source even when deployed as a web service
- Improvements and modifications are shared back with the community
- Educational institutions can freely use and adapt the platform
- Neuland Next App - Native mobile app for THI students
- Neuland.App - Web-based student portal
- THI API - University data API