home/ work/ZDGNS Museum Guide
Lead dev · 2022 · Accessibility

ZDGNS Museum Guide

A native mobile museum guide for the Slovenian Association of Deaf and Hard of Hearing — with 360° panoramic tours, QR-activated exhibits, interactive quiz, and full bilingual support. Built solo, simultaneously, for both Android and iOS.

Role Lead Developer
Year 2022
Platforms Android (Kotlin) · iOS (Swift)
Client ZDGNS — Zveza društev gluhih in naglušnih Slovenije
Domain Cultural · Accessibility · Mobile
Audience Deaf and hard-of-hearing visitors
Exhibit stops
40+
interactive museum panels
Platforms
2 / 2
Android + iOS, shipped
Languages
SL + EN
runtime switch, no restart
Accessibility
first-class
built for deaf visitors
ZDGNS Museum Guide screenshot

Overview

As the sole developer, I owned both platforms end-to-end — Kotlin for Android, Swift for iOS — delivering a full-featured museum companion app for the Association of Deaf and Hard of Hearing Societies of Slovenia (ZDGNS). The app launched alongside a physical exhibition at the Hiša znakovnega jezika (House of Sign Language).

The core challenge was accessibility: the primary audience is deaf and hard-of-hearing, which meant the entire UX had to work without any audio cues, with high-contrast images, clear iconography, and sign-language-community-sourced content throughout. The app connects to the client’s WordPress CMS via the WP REST API for the technical aids catalogue and history feed, while the 40+ museum exhibit stops are bundled as static data assets — meaning the guide works reliably in environments with poor connectivity.

The 360° virtual tour is rendered inside a native WebView shell pointing to the client’s hosted panorama (zveza-gns.si/virtualni-sprehod/), giving visitors a gyroscope-driven immersive walk through the museum space without requiring a separate VR app. QR codes placed at each physical exhibit panel trigger deep-link navigation directly to the relevant content in-app.

Architecture

~/zdgns-museum/architecture/system-map.svg
01 — MOBILE CLIENTSAndroidKotlin · minSdk 23 · API 31budiyev QR · Glide · VolleyiOSSwift · iOS 14.5+ · UIKitMercariQRScanner · L10n-swift02 — LOCAL CONTENT BUNDLE (installed with app)40+ exhibitsstatic Swift/Kotlin dataMuseum imagesmuseum1 … museum40+TranslationsSL · EN · runtime switchQR codesper-exhibit panel scan03 — REMOTE (network required)WordPress CMSzveza-gns.si WP REST API360 Panorama hostWKWebView / Android WebViewQuizzveza-gns.si WordPress page04 — OFFLINEExhibit guideworks without network

Reading the diagram: Both native apps share the same content structure but have zero shared code — each platform implements its own navigation, language switching, and media handling. The exhibit guide (40+ stops), museum images, translations, and QR assets are bundled at install time, so the guide works offline. Network is required only for the WordPress-backed technical aids catalogue, the hosted 360° panorama, and the quiz.

Shipping the same product on two platforms at once means you're making every architectural decision twice. The discipline that forces is worth it.
Davor Majc, Lead Developer / ZDGNS Museum
03 What I delivered · challenges solved

Six things shipped,
three hard ones solved.

Key contributions

  • Built both native apps simultaneously — Kotlin on Android, Swift on iOS — from scratch, solo.
  • Implemented QR-code scanning per exhibit: visitors scan a panel code and the app loads the exhibit detail inline.
  • Integrated 360° virtual tour of the museum via a hosted panorama rendered inside WKWebView / Android WebView, with per-exhibit deep-link navigation.
  • Delivered an interactive quiz module backed by the client's WordPress REST API.
  • Implemented runtime bilingual switching (Slovenian / English) — no app restart required on either platform.
  • Built the Technical Aids catalogue — fetching posts from the zveza-gns.si WordPress CMS via WP REST API.
  • Designed the Museum Guide section with 40+ exhibit stops, each with image, title, descriptive text, video button, and a 360° shortcut.

Challenges solved

  • Parity across two fundamentally different native stacks — same UX, same feature set, zero shared code.
  • Accessibility-first design for an audience that includes deaf and hard-of-hearing visitors — no audio cues, reliance on visual feedback throughout.
  • Embedding a hosted 360° panorama seamlessly inside a native shell while keeping navigation and back-gestures intact.
  • Runtime language switching without restarting the activity/scene — required rebuilding the root view controller hierarchy on both platforms.

Client

We've worked with Numen for years — from the reservation portal to the museum app and accessibility tools. Davor genuinely understands the needs of the deaf and hard-of-hearing community.
Matjaž Juhart, Secretary General / ZDGNS
04 Tech stack

What's under the hood.

KotlinSwiftWKWebViewQR Scanner360° PanoramaL10n-swiftGlideAlamofireSDWebImageVolley
Let's talk

Ready to fix, build,
or scale?

30 minutes, with me personally. I'll read your system like a log file and tell you what I'd do first. No pitch deck, no sales funnel.

Davor Majc, founder, Numen

What you get on call
→ a one-page diagnosis
→ 2–3 fix shapes, ranked by leverage
→ rough cost + timeline for each
→ yes/no — am I the right fit
+386 40 828 474 · Blejska Dobrava, SI