Navigating around TUM with excellence – An API and website to search for rooms, buildings and other places

Overview

NavigaTUM

App Status

NavigaTUM is a non-official tool developed by students for students, that aims to help you get around at TUM. Feel free to contribute.

Features:

  • Interactive or RoomFinder-like maps to lookup the position of rooms or buildings
  • Fast and typo-tolerant search
  • Support for different room code formats as well as generic names

All functionality is also available via an API.

Note: Not all buildings in NavigaTUM are owned by TUM, but are instead being used by TUM departments.

Screenshots

Screenshot of the main-index of the website

Screenshot of the main-index of the website

Screenshot of a building including an internal map

Screenshot of a building including an internal map

Screenshot of the search-page

Screenshot of the search-page

Getting started

NavigaTUM consists of three parts + deployment resources.

  • data/ contains the code to obtain and process the data
  • server/ contains the API server written in Rust, including MeiliSearch as a search backend
  • webclient/ contains a JS based web-frontend for the API
  • deployment/ contains deployment related configuration

Depending on what you want to work on, you do not need to set up all of them. For an overview how the components work, have a look at the deployment documentation.

The following steps assume you have just cloned the repository and are in the root directory of it.

Data

In case you do not want to work on the data processing, you can instead download the latest compiled files:

wget -P data/output https://nav.tum.sexy/cdn/api_data.json 
wget -P data/output https://nav.tum.sexy/cdn/search_data.json
wget -P data/output https://nav.tum.sexy/cdn/search_synonyms.json

Else you can follow the steps in the data documentation.

Server

Follow the steps in the server documentation.

Webclient

Follow the steps in the webclient documentation. If you want to only run the webclient locally, you can skip the "Data" and "Server" steps above and edit the webclient configuration to use the public API as is described in the webclient documentation.

License

All code is licensed under the GNU GPL v3:

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Comments
  • [Feature] Site Maps Zoom

    [Feature] Site Maps Zoom

    Is your feature request related to a problem? Please describe. The Site Maps are pretty small. Especially for older folks/ people with disabilitys this represents a significant hurdle. As the text on the image has a fixed size. image

    Describe the solution you'd like For accassability it may be nice to offer an option for users to zoom into the image/pop it out like for headline images.

    i.e. I would prefer a solution like this: image

    Describe alternatives you've considered In the long term, we are reducing our reliance on these maps anyway as they offer imo worse UX than the map, but sometimes having the extra context of a site-map may be nice.

    Additional context Not a active issue for the person, who suggesed this but something he found a nice to add.

    feature good first issue frontend 
    opened by CommanderStorm 17
  • [Bug] Geolocate-controll styling

    [Bug] Geolocate-controll styling

    Describe the bug The geolocatecontroll does not respect our colorscheme.

    To Reproduce Steps to reproduce the behavior:

    1. Tap the geolocatecontroll
    2. See ugly cyan

    Expected behavior I would expect the locate me button to have TUM-relevant styling.

    Screenshots image

    Additional context Not a high-priority bug

    bug good first issue frontend 
    opened by CommanderStorm 16
  • Added a custom maps style

    Added a custom maps style

    • [x] integrated our alternative map style
    • [x] changed to a custom (only for this project) style.json
    • [x] integrated into the build system

    Discussion

    The current implementation has slightly worse performance, due to using https://github.com/mapbox/mapbox-gl-leaflet under the hood. This is because:

    Slower performances: When using mapbox-gl-leaflet, mapbox-gl-js is set as not interactive. Leaflet receives the touch/mouse events and updates the mapbox-gl-js map behind the scenes. Because mapbox-gl-js doesn't redraw as fast as Leaflet, the map can seem slower.

    Alternatives I have considered:

    • using a custom rasterisation service. This is costwise not an option for us, as I dont want to pay as much as for example MapTiler charges for serverside rasterisation
    • using a tilejson compatible api. Not an option, because the one I found only has guides for vue-3 (we currently use vue-2) and the libarys I found which support vue-2 have other drawbacks. There may be one which I have not found, but currently this is not the case

    resolves #8

    Screenshots

    before: image

    after: image

    feature frontend 
    opened by CommanderStorm 14
  • Coordinate picker

    Coordinate picker

    This PR implements a coodinate Picker. resolves #107

    Todo:

    • [x] add translations
    • [x] figgure out a way of creating a draggable custom marker (I have tried the simple ways, something is not working; I have to spend some quality time debuging this)
    • [x] add a better styling than this: image image image

    since you are more into design: what UI would you (@octycs ) prefer?

    feature frontend 
    opened by CommanderStorm 9
  • mediaTUM

    mediaTUM

    This PR adds the best images from mediaTUM to NavigaTUM.

    There are still some issues, that have to be resolved, before this can be merged:

    • [x] I'd like your feedback on the values, I chose for THUMBNAIL_SIZE and HEADER_MAX_SIZE
    • [x] There seem to remain some issues with the image-matching
    -- 50 Add image information
    Warning: No source information for image '0509.EG.980_0.webp', it will not be used
    Warning: No source information for image '0509.EG.980_1.webp', it will not be used
    Warning: No source information for image '0509.EG.980_2.webp', it will not be used
    Warning: No source information for image '2319.EG.001_0.webp', it will not be used
    Warning: No source information for image '5401.01.101K_0.webp', it will not be used
    Warning: No source information for image '9001.EG.012_0.webp', it will not be used
    Warning: No source information for image '5532.Z1.003_0.webp', it will not be used
    Warning: There are images for 'tb-stammgelaende', but it was not found in the provided data, ignoring
    Warning: There are images for 'tb-chemie', but it was not found in the provided data, ignoring
    Warning: There are images for 'ottobrunn', but it was not found in the provided data, ignoring
    
    • [x] I have not implemented a way of controll how a thumbnail is cropped. See 5304_0.webp (the mensa) for an example, why this is nessesary. My strategy of using the center square of the image works pretty much on every other image, but here it fails.
    data 
    opened by CommanderStorm 9
  • Modal for roomfinder

    Modal for roomfinder

    Resolves: https://github.com/TUM-Dev/NavigaTUM/issues/143 grafik

    Is the roomfinder-map sufficient or should the map-cross also be implemented to the modal? I already tried to implement the cross but it is a bit difficult with the position because I think you have to make a function like the loadRoomfinderMap-function for the roomfinder modal.

    frontend 
    opened by Marius1501 8
  • OpenAPI Docs

    OpenAPI Docs

    This PR replaces our documentation via openapi docs. This PR also fixes some errors in the server that came to light while documenting it.

    Todo:

    • [x] fix error, that keeps tripping up the server
    • [x] validate, that the shema I have written down is actually correct
      • [x] search
      • [x] get
      • [x] get_token
      • [x] feedback
      • [x] healthcheck
    • [x] proofread the docs

    @octycs I have one problem with the server. This is why I am publishing this PR now, instead of later when I would be more shure, that the openapi.yaml I have written is 100% correct. You can reproduce the issue by

    1. run the server in a different tab
    2. installing schemathesis
    3. st run --endpoint /api/search/.+ ./openapi.yaml --base-url http://localhost:8080

    I am not getting anywhere debugging this (the error seems to pop out of nothingness). Could you look into this

    server 
    opened by CommanderStorm 8
  • [Bug] Crash because of Roomfinder Maps data for Z10

    [Bug] Crash because of Roomfinder Maps data for Z10

    Describe the bug Z10 (and potentially other entries) have an error in the Roomfinder Maps data.

    To Reproduce Steps to reproduce the behavior:

    1. Go to https://nav.tum.sexy/building/0510
    2. Get an empty page because of the error: TypeError: view_data.maps.roomfinder.available[state.map.roomfinder.selected_index] is undefined

    Expected behavior Should not crash

    Additional context This is a crash in the frontend (which shouldn't happen), but probably related to an error in the data.

    bug frontend data 
    opened by octycs 7
  • Update actix-web requirement from 3 to 4 in /server

    Update actix-web requirement from 3 to 4 in /server

    Updates the requirements on actix-web to permit the latest version.

    Release notes

    Sourced from actix-web's releases.

    actix-web: v4.0.1

    Fixed

    • Use stable version in readme example.
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 7
  • Support for custom maps + StudiTUM Garching maps floor 0-3

    Support for custom maps + StudiTUM Garching maps floor 0-3

    This PR adds the possibility to add custom maps that appear in the Roomfinder map lists and includes some maps for the StudiTUM Garching along with coordinates.

    ToDos:

    • [x] Unify and document data format changes (especially ids are now mixed between str and int)
    feature data 
    opened by octycs 7
  • [Entry] [5506.01.628]: Koordinate bearbeiten

    [Entry] [5506.01.628]: Koordinate bearbeiten

    Hallo, ich möchte diese Koordinate zum Roomfinder hinzufügen:

    "5506.01.628": { lat: 48.26626184691719, lon: 11.66844799348732 }  
    

    mein letzter request 301 wurde zwar gelöscht, aber der Ort auf dem Plan hat sich nicht verändert.

    entry webform 
    opened by TCA-Bot 6
  • [Feature] Migration from `russqlite` to `diesel`

    [Feature] Migration from `russqlite` to `diesel`

    Is your feature request related to a problem? Please describe. The API from russqlite not great to work with and likely error prawn. I think it is time to switch to a real ORM.

    Describe the solution you'd like I would like to exchange all usages of russqlite with the respective usecases from diesel

    Describe alternatives you've considered Sticking with russqlite. While being an option, manually constructing queries and extracting from them increases the likelyhood of errors.

    Additional context This is becoming an issue in #324, as there more SQL is needed.

    feature server 
    opened by CommanderStorm 0
  • [Bug] Cross not at the right place when resizing the window

    [Bug] Cross not at the right place when resizing the window

    Describe the bug When you resize the window the cross of the roomfinder map is not at the right place anymore.

    To Reproduce Steps to reproduce the behavior:

    1. Go to any room
    2. Click on roomfinder
    3. Make your browser-window smaller
    4. The cross is at a wrong place

    Expected behavior The cross should stay at the right place when resizing the window.

    Screenshots

    Fullscreen grafik

    Smaller Window grafik

    Desktop:

    • OS: Windows 11
    • Browser: Mozilla Firefox
    • Version 107.0 (64-bit)
    bug frontend 
    opened by Marius1501 0
  • [Feature] Search page pagination

    [Feature] Search page pagination

    Is your feature request related to a problem? Please describe. Currently, our approach to the search page was this image I think we could improve this UX

    Describe the solution you'd like Meilisearch has introduced a pagination feature. This would be a good fit for our search results page.

    Describe alternatives you've considered Leave as is: The current approach works quite well. If talking about room-searches it is usually not that important to offer all the rooms, but only the first 30'ish ⇒ offering all via pagination is not a huge priority

    feature server frontend priority: eventually 
    opened by CommanderStorm 0
  • Added the calendar-modal

    Added the calendar-modal

    Closes https://github.com/TUM-Dev/NavigaTUM/issues/289

    grafik

    I added the modal for the calendar when clicking on the calendar icon. I used an iframe to display the TUMOnline website but the URL is not found. I don't know what's the problem because it is the same URL which is used to open the website.

    frontend blocked 
    opened by Marius1501 3
  • Automated Ansible Setup

    Automated Ansible Setup

    This PR provides the setup script for automatically setting up our future HA cluster (currently our deployment is really not in this ballpark. This would be a big improvement.) It is currently very WIP.

    Current Roadblock: ZIT is sitting on their hands for “important reasons”. We cannot switch to a quicker provider for

    • “We cannot help a central service, as our Profs would not allow this”~ Rechnerbetriebsgruppe or
    • “Our Vereinszweck sadly does not allow this”~ StuStaNet or
    • “We won't offer this”~ Compref

    This will mostly just go through a Docs-review.

    deployment 
    opened by CommanderStorm 0
Owner
TUM Developers
We are passionate about open source development for all kinds of university software. Come join us an become a TUM Developer!
TUM Developers
A tool for navigating and reorganizing Jiu Jitsu instructionals

Hackers Guide to Jiu Jitsu: The Application A tool watching and navigating Jiu Jitsu instructionals. Features: Scene detection Scene title recognition

Ioannis Canellos 6 Aug 20, 2022
FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.

Connect quickly to your services ?? FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config. Instal

Julien 85 Dec 14, 2022
UpVent Website (Powered by Rust + Svelte & Fernet Branca).

UpVent Website Source Build Status Description This is the source code for the UpVent's website under upvent.codes. Development occurs on the master b

UpVent 3 Dec 2, 2022
Use the osu!direct button on the osu! website to download beatmaps directly to osu

osum!direct-web Use the osu!direct button on the osu! website to download beatmaps directly to osu! - without osu! supporter. Badges Usage Run the app

oSumAtrIX 1 Jan 21, 2022
📸 website screenshots as a service

website-screenshot ?? website screenshots as a service Features ?? powered by Rust ?? blazing fast ?? ‍‍ built-in ratelimiter ?? built-in storage prov

Tomio 13 Oct 22, 2022
Are we lang yet? A simple website providing information about the status of Rust's language development ecosystem.

Are We Lang Yet This project answers the question "Is the Rust ecosystem ready to use for language development yet?". arewelangyet.com What is this? C

null 8 Dec 7, 2022
A website for the Leptos Web Framework!

Leptos Website A Repo for the public facing Leptos website. Still a WIP. Client Side Rendering This example cannot be built as a trunk standalone CSR-

Leptos 7 May 2, 2023
🌊 ~ seaward is a crawler which searches for links or a specified word in a website.

?? seaward Installation cargo install seaward On NetBSD a pre-compiled binary is available from the official repositories. To install it, simply run:

null 3 Jul 16, 2023
Tool for mass import of hosts into Zabbix (and other API functions)

zabbix-tools A CLI tool for interacting with Zabbix API built in Rust. Designed for Zabbix 6.0. Functions added to test API and add hosts manually or

null 1 Apr 21, 2022
Downloads and provides debug symbols and source code for nix derivations to gdb and other debuginfod-capable debuggers as needed.

nixseparatedebuginfod Downloads and provides debug symbols and source code for nix derivations to gdb and other debuginfod-capable debuggers as needed

Guillaume Girol 16 Mar 6, 2023
Captures packets and streams them to other devices. Built for home network analysis and A&D CTFs.

?? shiny-donut shiny-donut is a packet capture app that supports streaming packets from a remote system to another device. The main use for this is to

Justin Perez 3 Nov 30, 2022
Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other projects

Mercy ?? Documentation Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other pro

Umiko Security 2 Nov 27, 2022
Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other projects

Mercy ?? Documentation Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other pro

CyberSuki 2 Nov 27, 2022
A `nix` and `nix-shell` wrapper for shells other than `bash`

nix-your-shell A nix and nix-shell wrapper for shells other than bash. nix develop and nix-shell use bash as the default shell, so nix-your-shell prin

Mercury 15 Apr 10, 2023
Striving to create a great Application with full functions of learning languages by ChatGPT, TTS, STT and other awesome AI models

Striving to create a great Application with full functions of learning languages by ChatGPT, TTS, STT and other awesome AI models, supports talking, speaking assessment, memorizing words with contexts, Listening test, so on.

null 155 Apr 20, 2023
Tool that mirrors questions and resolutions from other forecasting platforms to Manifold.

Tool that mirrors questions and resolutions from other forecasting platforms to Manifold. Managram commands People can interact with the bot by sendin

Joris Kerkhoff 3 Nov 7, 2023
Turbine is a toy CLI app for converting Rails schema declarations into equivalent type declarations in other languages.

Turbine Turbine is a toy CLI app for converting Rails schema declarations into equivalent type declarations in other languages. It’s described as a to

Justin 2 Jan 21, 2022
Write simple proc-macros inline with other source code.

script-macro An experimental way to write simple proc-macros inline with other source code. Did you ever end up getting frustrated at the boilerplate

Markus Unterwaditzer 17 Jun 10, 2023
Programming language made by me to learn other people how to make programming languages :3

Spectra programming language Programming language made for my tutorial videos (my youtube channel): Syntax Declaring a variable: var a = 3; Function

Adi Salimgereyev 3 Jul 25, 2023