Giter VIP home page Giter VIP logo

festapp's Introduction

Festapp

Mobile solution for your festival, conference or event.


Features

  • Everybody sees:
    • Timeline - Schedule overview by time and day.
    • Event detail - Includes: Time, Place (with link), Content, Subevents, Sign In/Out button.
    • Timetable - View on event entries by the axis Time and Place.
    • My schedule - Attendee can add event entries into his own list.
    • News/Notifications - Receive news/notifications relevant to event.
    • Map - Map with current user location and places with custom icons and description.
    • Info - Various information supporting clickable phone numbers, e-mails or other hypertext.
    • Songs - Page with list of Songs with possibility to increase font size.
  • Signed in user sees:
    • User profile - Name, e-mail, sex, role, accommodation (with link).
    • Limited capacity events.
    • Groups (discuss groups).
    • Synchronized "My schedule".
  • Admin sees:
    • Admin dashboard with possibility to change: Information, Events, Places, Groups, Exclusivity, Users.
    • User import from CSV table.
    • Send News/Notifications.
    • Change or delete content of Event, Information or News via included Text Editor.
  • Other features
    • Available on Android, iOS and Web.
    • Available Offline: Timeline, Event detail, Timetable, My Schedule, News, Map, Info, Songs, User profile.
    • Languages: English, Czech, Slovak, Polish, German, Ukrainan.

Architecture

The solution is based on the Flutter framework with the Dart language. As a backend, the serverless service Supabase is used. Both technologies were chosen to speed up development, and they have effectively met this requirement.


Currently in production

Links to Appstore/Play Store versions are usually saved in info section.


Latest development

2024.01

  • Full support for offline display mode (if connection is not available, data from cache will be used). Simply open the application once and data will be loaded in the background.
  • Timetable display of the program (scrollable page with a time axis and locations).
  • Creation of my program using the + button (even without the need to log in).
  • Full support for URLs (ability to link to pages in the web version of the application).
  • Ukrainian language added among the languages.
  • Minor bug fixes.

About

The app was originally developed by a team of volunteers for Absolventský Velehrad event in 2023.

festapp's People

Contributors

esterko avatar gldkslfmsd avatar kwaniova avatar marekm294 avatar miakh avatar shalldar avatar woxeas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

festapp's Issues

Global setting page

Global configuration for application to

  • default map position and zoom
  • which user information to show
  • enable features: skupinky, exkluzivita

HomePage: Ikonka s avatarem a se jménem + logo AV 2023

Ikonka s avaterem a jménem přes kterou se jde prokliknout na uživatelské nastavení.
V případě, že uživatel nebude přihlášený, bude tam ikonka/tlačítko "přihlásit se".

Logo AV v opačné části než je ikonka s avatarem, viz připravený design od Marušky.

Pro ikonku s avatarem lze momentálně použít Icons.account_circle_round

MapPage: zvýraznění jednoho místa na mapě

Pokud stránka mapy příjímá odkaz (id tabulky places), tak se zvýrazní (zvětší se ukazatel nebo se nějak jinak zvýrazní) dané místo na mapě. Jde pouze o úpravu na stránce mapy.

NewsPage: počítadlo nepřečtených zpráv na tlačítku

Pokud je počet nepřečtených zpráv větší než 0, zobrazí se vpravo nahoře v malém červeném kolečku počet nepřečtených zpráv.

Počet nepřečtených zpráv lze zjistit z user_news, podle poslední přečtené zprávy.

NewsPage (Ohlášky)

Stránka s novinkami.
Stránka má podobu grouped listview - např. https://pub.dev/packages/grouped_list.
Zprávy jsou sgrupované podle dne, kdy byly odeslané. Formát zprávy je neformátovaný text.
Zprávy jsou seřazené od nejnovější po nejstarší.

Na stránce je tlačítko odeslat, kde může organizátor zadat zprávu a odeslat ji. Po stisku tlačítka se zobrazí popup, kde lze napsat zprávu. Tlačítka jsou Storno-Odeslat.

Omezení:
Zprávu může psát pouze přihlášený uživatel (tlačítko plus pouze pro přih. uživ.). Zobrazit je mohou všichni.
Přečtené zprávy se zobrazí jako zašedlé. (Nebo nepřečtené zprávy se zobrazí jako zvýrazněné).

  1. Po zobrazení se stáhnou všechny zprávy.
  2. Nepřečtené zprávy se zobrazí výrazněji.
  3. Po zobrazení stránky se nastaví v user_news sloupec s uživatelem na id nejnovější zprávy.

Databáze:
Součástí je vytvoření tabulky news se sloupci id created_at, created_by, message.
Další součást je vytvoření tabulky user_news se sloupci id (userId) a last_read_id (nejnovější přečtená zpráva).

Login page - maxWidth ?

Login vypada docela hrozne na webu, myslim ze maxWidth by pomohl a bylo by to rychle reseni

HomePage: Tab View programu

Program na hlavní stránce obsahuje dva skrolovatelné programy, kterých jde překlikávat pomocí záložky.
Příklad překlikávacích záložek:
https://docs.flutter.dev/cookbook/design/tabs

Program je zobrazený po jednotlivých dnech (čtvrtek, pátek, sobota, neděle), zobrazené jsou paralelní programy vedle sebe.
Jeden tab zobrazuje celý program, druhý tab zobrazuje vybraný program uživatele.

Příklad možného zborazení programu:

Odkaz na návrh hlavní stránky s programem od Marušky:
https://cdn.fbsbx.com/v/t59.2708-21/339797749_1146397376761684_1878402479470115393_n.pdf/AV-appka.pdf?_nc_cat=110&ccb=1-7&_nc_sid=0cab14&_nc_ohc=d2Zya4CqBxIAX8CZOLz&_nc_ht=cdn.fbsbx.com&oh=03_AdToGH4dR1SEKFdxMv1S35AI8W_yY-DiultrG3zvAZe-tw&oe=64456F25&dl=1

MapPage - základ

Aplikace obsahuje mapu, na kterou se jde prokliknout přes ikonu na hlavní stránce, přes rozkliknutí detailu programu případně přes jiný odkaz v aplikaci (například část info).

Mapa v aplikaci zobrazuje místa, na kterých v AV probíhá program, ubytování, stravování nebo jiné důležité body.

Use> https://docs.fleaflet.dev/

EditorPage: RichTextEditor

Použij komponentu na úpravu textu a ověř, že lze upravený text zobrazit. Komponenta by měla být flutter_quill.
Komponenta musí být schopna fungovat na webu.
Je možné vkládat i obrázky, odkazy, velikosti písma, tučné písmo, odstavce...
Upravený text lze uložit jako text do supabase databáze (jako html např.) a obrázky zvlášť do supabase storage.
Stránka vypadá jako: Levá půlka je samotný editor, v pravé půlce se zobrazí výsledek, jak bude vypadat na telefonu (šířka 415px).
Součástí je jedno tlačítko "uložit", které uloží aktuální obsah do tabulky information (title: test, content: samotné html).
Při navštívení RichTextEditoru, se upravovaný text znovunačte.

HomePage: Ikonky na hlavní stránku

Poptat od Marušky grafický podklad k ikonkám do aplikace ->_ viz její návrh na homepage.

Umístění ikonek ve spodní části obrazovky.

Full offline support

Full offline support including events, info, news, my_program, map.

  • subevents
  • my group
  • my events
  • user profile

Program na hlavní stránce

Program na hlavní stránce obsahuje dva skrolovatelné programy, kterých jde překlikávat pomocí záložky.
Příklad překlikávacích záložek:
https://docs.flutter.dev/cookbook/design/tabs

Program je zobrazený po jednotlivých dnech, zobrazené jsou paralelní programy vedle sebe.
Při rozkliknutí detailu programu je možné získat podrobnější informace, prokliknout na mapu s místem průběhu programu, registrovat se na program.

Příklad možného zborazení programu:

https://pub.dev/documentation/timelines/latest/
https://chulwoo.dev/timelines/#/

Odkaz na návrh hlavní stránky s programem od Marušky:
https://cdn.fbsbx.com/v/t59.2708-21/339797749_1146397376761684_1878402479470115393_n.pdf/AV-appka.pdf?_nc_cat=110&ccb=1-7&_nc_sid=0cab14&_nc_ohc=d2Zya4CqBxIAX8CZOLz&_nc_ht=cdn.fbsbx.com&oh=03_AdToGH4dR1SEKFdxMv1S35AI8W_yY-DiultrG3zvAZe-tw&oe=64456F25&dl=1

Získání dat z google tabulek

Tlačítko z administračního rozhraní zavolá skript, který stáhne uživatelské data z google tabulky.
Parametry
Název listu: Data Master

Názvy sloupců:

Časová značka | Číslo registrace | Id | Jméno | Příjmení | Pohlaví | E-mail | Rok narození | Adresa trvalého bydliště | Kraj | Město, kde trávíš čas | Varianta ubytování | Chceme bydlet spolu | Oblast dobrovolnické pomoci | Víkendovka pro dobrovolníky | Diskuzní skupinky | Telefon | Telefon v případě ohrožení | Zdravotní omezení a diety | Tištěná brožura | Triko | Dobrovolný příspěvek | Potvrzení o daru | Poznámka | Informace po AV | Celková cena | Role

Názvy podstatné pro aplikaci:
Id
Jméno
Příjmení
E-mail
Pohlaví
Varianta ubytování -

const GYMPL_TYPE = "gympl";  
const VDCM_POSTEL_TYPE = "vdcmPostel"; 
const SPACAK_FOOD_TYPE = "spacakFood";
const SPACAK_ONLY_TYPE = "spacakOnly";
const PROGRAM_FOOD_TYPE = "programFood";
const PROGRAM_ONLY_TYPE = "programOnly";
const PROGRAM_ONLY_FRIDAY = "programOnlyFriday";
const PROGRAM_ONLY_SATURDAY = "programOnlySaturday";
const SUB_ACCOMODATION = "waiting";
const STORNO_TYPE = "storno";
const OTHERS_TYPE = "others";

Telefon
Telefon v případě ohrožení
Role

Get CSV form here: https://docs.google.com/spreadsheets/d/1fkh82rfpYaHBZezoILeIH5mnVpd9sgDiAiM4sUilqMQ/edit?usp=sharing

Dominik:

zkoušel jsem to podle
https://blog.codemagic.io/flutter-with-google-sheets/#deployment-of-app-script

AppScript:

https://script.google.com/d/1LPGZlM6A_q6uiT3MHvYJ6ulnolHbXJEtml87BptqAIJNjPAhgv6qcU5d/edit?usp=sharing

  • přidej si optiony --web-port 7357 -- protože tenhle port je zaregistrovanej u googlu
    {
    "name": "av-app",
    "request": "launch",
    "type": "dart",
    "args": ["--web-port", "7357"]
    },

The signIn method is discouraged on the web because it can't reliably provide an idToken.
Use signInSilently and renderButton to authenticate your users instead.
Read more: https://pub.dev/packages/google_sign_in_web
GSI_LOGGER-TOKEN_CLIENT: Starting popup flow.
[GSI_LOGGER-OAUTH2_CLIENT]: Starting popup timer.
83
[GSI_LOGGER-OAUTH2_CLIENT]: Checking popup closed.
GSI_LOGGER-TOKEN_CLIENT: Handling response. {"access_token":"fhjfjffchQojsIcRcWeE5SOqKwbBW2FkuyFuYaHz81b290zMdh-G6fRlw6loLGdoaLtzLkmJV2te0OY7yvDaRcdjxd9tsUjywThcUklgOX2ajGLZBYS8dhkpLO4u-nwv2LVarYv_bCkFdW2JwzcEtQaCgYKAT0SARMSFQF4udJhOBsccetD5h9loe2x9pKmjw0163","token_type":"Bearer","expires_in":3599,"scope":"email profile https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/spreadsheets openid https://www.googleapis.com/auth/userinfo.email","authuser":"0","prompt":"none"}

[GSI_LOGGER-OAUTH2_CLIENT]: Popup timer stopped.
GSI_LOGGER-TOKEN_CLIENT: Trying to set gapi client token.
GSI_LOGGER-TOKEN_CLIENT: The OAuth token was not passed to gapi.client, since the gapi.client library is not loaded in your page.

"XMLHttpRequest error."

add user data
https://supabase.com/docs/guides/auth/managing-user-data

InfoPage

Tlačítko info na hlavní stránce vede k obecnějším informacím o celém AV a obsahuje témata jako:

  • Novinky
  • Kontakty (obecné info, ubytovatelé, zdravotníci)
  • Ubytování a stravování
  • Zdravotní služba
  • Parkování
  • Zpěvníky
  • Organizační tým
  • Ztráty a nálezy

Info stránka obsahuje:

  • nadpis
  • popis (html)

Z pohledu vývojáře jde o zobrazení toho, co je v tabulce information. Jde o seznam názvů, při rozkliknutí se zobrazí popis viz

TimelinePage: Timeline programu

Stránka s detailem programu.
Zobrazí se tyto informace:

  • Název
  • je nějak znázorněné, pokud je uživatel na program přihlášen. Zároveň se může odhlásit, pokud nedošlo k začátku programu. Prozatím se jeden z programů zobrazí jako označený.
  • čas
  • místo
  • popis programu (HTML)

Pro tuto story jenom jeden den se statickými daty.

NewsPage: přídavky

  • čas zprávy ve formátu hh:mm
  • autor (jméno)
  • podpora hypertextu uvnitř zprávy (prokliknutelného odkazu)

NewsPage: notifikace

Během běhu aplikace (když je aplikace otevřená) a dojde nová zpráva, zobrazí se uživateli ve formě toastu.

ProgramPage

Stránka pro jednotlivý program.

Součástí programu je možnost zvolit, zda obsahuje nějaké info jen pro přihlášené.
Taky je možné pro admina zobrazit přihlášené lidi a dodávat info (Odeslat zprávu o změně místa nebo jiné informace).

UserPage

Stránka obsahuje:

Jméno
Příjmení
Pohlaví
Roli (organizátor - dobrovolník - účastník)
(nullable)Dobrovolnickou oblast
(nullable)Místo ubytování
Tlačítko odhlásit (po odhlášení je uživatel přesměrován na HomePage)
Přístup na AdminPage (pokud ho uživatel má)

údaje jsou uložené v tabulce migrated_users

Update na homepage:
místo odhlásit - jméno uživatele

PlaceChooserPage: Nástroj pro výběr místa

Funkce pro administrátora pro editaci místa v mapě

Otevře se mapa a uprostřed je prázdná kapka, jejíž dolní bod určuje souřadnice, které při uložení stránka vrací.
Stránka vrací bod LatLng.
V dolní části se zobrazí tlačítka uložit a storno. Pokud uživatele stiskne storno, stránka vrací null, v opačné případě bod.
Stránku lze také použít pro editaci (pokud stránka jako parametr přijímá bod).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.