Skip to content

About

the repo for the famous defikarte.ch website

Topics

Resources

Stars

13 stars

Watchers

2 watching

Forks

Latest commit

 

History

655 Commits

Folders and files

Repository files navigation

defikarte.ch

Die Defikarte der Schweiz

Auf defikarte.ch sind derzeit über 15’000 Defibrillatoren mit ihrem Standort in der Schweiz und in Liechtenstein erfasst und täglich kommen weitere hinzu. Ziel ist es, durch einfachen Zugang zu den Defibrillatoren Leben zu retten.

App

Die App zu Defikarte.ch findet man in den Stores des jeweiligen Anbieters.

appstore playstore

Awards

Nominierungen

Sponsoren

https://www.defikarte.ch/sponsors

Wir suchen Sponsoren Die Kosten für die Infrastruktur, wie Backend-Dienste und die Publikation der Webseite, werden durch unsere Partner gedeckt. Es ist uns wichtig, kostendeckend und gemeinnützig zu arbeiten, um unabhängig zu bleiben. Überschüsse investieren wir in die Weiterentwicklung der Karte, um ihre Reichweite und ihren Nutzen zu erhöhen.

Von unserer Plattform profitieren viele Organisationen. Mit deiner Unterstützung hilfst du uns, dieses wichtige Projekt aufrechtzuerhalten. Als Sponsor bieten wir dir eine individuelle Lösung und eine würdige Anerkennung. Werde Teil unserer Mission, Leben zu retten! Melde dich bei uns – Wir freuen uns auf deine Nachricht.

Contributors

Made with contributors-img.

Open Source

Open Source und Open Data ist einer der Grund-Manifeste der Defikarte.

Wir untersützen folgende Open Source Initiativen:

Development Setup

This is a monorepo with three packages, wired together with pnpm workspaces:

  • /src/app - React + Vite app, packaged as a native iOS & Android app with Capacitor
  • /src/web - React web application
  • /src/shared - Shared code between app and web

src/app and src/web each link ../shared as a workspace package, so dependencies are installed per package.

Prerequisites

  • Node.js 24
  • pnpm 10
  • For mobile builds: Android Studio + JDK 21 (Android), macOS with Xcode (iOS)

Installation

cd src/app
pnpm install

cd ../web
pnpm install

Both packages read their configuration from a local .env file - copy .env.template and fill in the values.

Running the Projects

Mobile App:

cd src/app
pnpm run dev            # browser dev server
pnpm run build          # web bundle into dist/ (this is what Capacitor ships)
pnpm run sync:android   # copy dist/ + plugins into the Android project
pnpm run sync:ios       # same for iOS (macOS only)
npx cap open android    # open in Android Studio to run on a device/emulator
npx cap open ios        # open in Xcode

Web Application:

cd src/web
pnpm run dev        # Start development server
pnpm run build      # Build for production

Mobile (Capacitor)

The app is not React Native - Capacitor wraps the built web bundle (src/app/dist) in a native WebView and exposes native APIs through plugins, currently geolocation via @capacitor/geolocation and the system bars via @capacitor/core. The native projects are committed under src/app/android and src/app/ios, and the app id is ch.defikarte.app.

Because the native shells load the production build, pnpm run build has to run before every cap sync. See src/app/README.md for the full workflow, and docs/mobile-release-setup.md for signing and store releases.

CI/CD Pipelines

Workflow Trigger What it does
Web: Build and Deploy (deploy-web.yml) push to main / dev touching src/web builds the web app and deploys it to defikarte.ch (main → production, dev → staging)
Mobile: Build (build-mobile.yml) push to main touching src/app / src/shared, or manual on any branch builds signed .apk, .aab and .ipa, creates the version tag and a GitHub release (prerelease -beta off main)
Mobile: Deploy to Stores (deploy-mobile.yml) after a release-producing mobile build, or manual with a release tag uploads the .aab to the Play internal track and the .ipa to TestFlight

Mobile versions are MAJOR.MINOR.<build number> (e.g. 1.0.52 = Android versionCode 52 = iOS build 52). Bump MAJOR.MINOR via version in src/app/package.json. The tags are created by the workflow, so don't push version tags by hand. Details: docs/mobile-release-setup.md.

Shared Code

The /shared folder contains utilities and hooks that are used by both the app and web projects. See /shared/README.md for more details.

Example usage:

import {
  formatCoordinates,
  calculateDistance,
  useDebounce,
} from "@defikarte/shared";

About

the repo for the famous defikarte.ch website

Topics

Resources

Stars

13 stars

Watchers

2 watching

Forks

Sponsor this project

Contributors

Languages