Learn&Share je inovativna platforma za deljenje veština, gde svako može biti i učenik i učitelj, bez obzira na formalno obrazovanje. Verujemo da svako poseduje vredne veštine i stvaramo siguran prostor gde ljudi mogu unovčiti svoje sposobnosti ili ih besplatno deliti kao volonteri. Ono što nas izdvaja jeste to što ne ograničavamo kategorije veština – od tradicionalnih do nesvakidašnjih, svaki mentor može predložiti sopstvenu oblast podučavanja. Bezbednost korisnika nam je prioritet, pa zato uvodimo obaveznu video verifikaciju za mentore, dok kvalitet nastave potvrđuju stvarne ocene učenika. Learn&Share nije samo aplikacija – to je društveni projekat i dinamična zajednica usmerena na razvoj javne komunikacije i pristupačnog obrazovanja za sve. Pridruži nam se i istraži nove horizonte u učenju i podučavanju!
Learn&Share je mobilna aplikacija za razmenu znanja, gde korisnici mogu nastupati kako u ulozi učenika, tako i predavača. Aplikacija je razvijena korišćenjem React Native i Expo za frontend i Go za backend.
U savremenom svetu znanja i iskustva se obogaćuju kroz razmenu informacija. Projekat Learn&Share je kreiran kako bi pružio platformu na kojoj korisnici mogu ne samo steći nova znanja, već i podeliti svoje veštine, stvarajući aktivnu zajednicu uzajamne pomoći. Glavni cilj aplikacije je razmena veština.
Learn&Share je inovativna mobilna aplikacija za razmenu znanja, gde svaki korisnik može biti kako učenik, tako i predavač. Aplikacija obezbeđuje intuitivno razumljiv interfejs i pojednostavljen proces interakcije, omogućavajući:
-
Autentifikacija i bezbednost:
Jednostavan proces registracije i prijave uz korišćenje metoda validacije. Sistem obezbeđuje pouzdano čuvanje podataka i tokena autorizacije, a takođe primenjuje enkripciju za zaštitu korisničkih informacija. -
Pretraga i odabir predavača:
Korisnici dobijaju pristup proširenom spisku predavača, gde mogu dospeti svi koji žele deliti svoja znanja. Detaljne informacije uključuju ključne veštine, opis, obaveznu video prezentaciju (postavljenu na YouTube za potvrdu kompetentnosti) i recenzije, što pomaže u donošenju svesnog izbora. -
Rezervacija časova:
Praktičan proces rezervacije časova uključuje izbor kategorije časa, sinhronizaciju sa kalendarom i potvrdu vremena. Ovo pomaže u izbegavanju konflikata u rasporedu i efikasnom organizovanju sastanaka sa predavačima. -
Multimedijalna komunikacija:
Implementirana je podrška za kvalitetne video pozive za održavanje onlajn časova. Integracija sa savremenim video platformama obezbeđuje stabilnu vezu i kvalitetan prenos audio/video, čak i pri ograničenom protoku mreže.
Projekat je izgrađen na osnovu klijent-server arhitekture:
- Klijentski deo (frontend) - mobilna aplikacija na React Native sa Expo
- Serverski deo (backend) - REST API na Go
- Baza podataka - PostgreSQL za čuvanje svih podataka aplikacije
- Skladište objekata - Minio za čuvanje slika
- Video komunikacije - LiveKit za kreiranje video konferencija
|── android - podešavanja za kompilaciju na android
|── assets - čuvanje dodatnih resursa
|── ios - podešavanja za kompilaciju na ios
|-- src
| |── app - glavni ekrani aplikacije
| |── components - komponente koje se mogu ponovo koristiti
| |── utilities - uslužne funkcije i kukice
| |── providers - provajderi konteksta
| └── locales - fajlovi za lokalizaciju
cmd/
├── main/main.go // pokretanje projekta, učitavanje konfiguracije, graceful shutdown
internal/
├── application/application.go // aplikacija, upravljanje: povezivanje sa DB, logger, kreiranje/pokretanje/zaustavljanje servera
├── config/config.go // učitavanje, validacija konfiguracije iz env
├── entities/... // entiteti za DB i poslovnu logiku
├── errors/... // greške u poslovnoj logici, repozitorijumu i transportu
├── imgutils/... // alati za operacije sa slikama
├── httputils/... // http alati za transportni sloj
├── repository/... // repozitorijum DB: inicijalizacija, upiti, transakcije
├── service/
│ ├── jwt/service.go // jwt: generisanje, validacija
│ └── livekit/service.go // livekit: generisanje tokena za sastanke
├── transport/rest/
│ ├── server.go // rest api, rutiranje, dodavanje handlera i middleware-a
│ └── middlewares/... // middleware: auth (jwt), cors, logger
├── use_cases/... // poslovna logika: endpoint, servis, repozitorijum, tipovi
pkg/
├── db/postgres/postgres.go // postgres: povezivanje
├── hasher/hasher.go // heširanje: bcrypt
├── object_storage/... // skladište objekata: za čuvanje slika
└── logger/logger.go // logger: zap, konfiguracije
-
Osnovne tehnologije:
- React Native (verzija 0.76.6)
- Expo (verzija 52.0.25)
- TypeScript
- Node.js
-
Navigacija i rutiranje:
- expo-router
- react-native-screens
- react-native-safe-area-context
-
Stanje i forme:
- react-hook-form
- zod (validacija)
- @hookform/resolvers
-
UI komponente:
- react-native-dropdown-picker
- react-native-toast-notifications
- react-native-sticky-parallax-header
-
Multimedija i komunikacije:
- @livekit/react-native (video pozivi)
- react-native-webrtc
- FontAwesome (ikone)
-
Čuvanje podataka:
- expo-secure-store
-
Lokalizacija:
- i18next
- react-i18next
- expo-localization
-
Osnovne tehnologije:
- Go (programski jezik)
- PostgreSQL (baza podataka)
- Docker (kontejnerizacija)
-
Veb okvir i rutiranje:
- chi (HTTP ruter)
-
Logovanje i dokumentacija:
- zap (logovanje)
- swaggo (Swagger dokumentacija)
-
Autentifikacija i bezbednost:
- JWT (autentifikacija)
- bcrypt (heširanje lozinki)
-
Rad sa bazom podataka:
- sqlx (komunikacija sa bazom podataka)
-
Multimedija i skladištenje:
- LiveKit (video komunikacije)
- Minio (objektno skladište za slike)
Kompletan spisak dostupnih endpoint-a dostupan je na adresi: http://adoe.ru:81/swagger/index.html
API Handleri
├── Auth
│ ├── POST /auth/login // Prijava sa email-om i lozinkom
│ └── POST /auth/signup // Registracija novog korisnika
│
├── Categories
│ └── GET /categories // Dobijanje liste svih kategorija
│
├── Image
│ └── GET /image // Dobijanje slike po imenu fajla
│
├── Lessons
│ ├── POST /lesson // Dodavanje nepotvrđenog časa (zahtev)
│ ├── GET /lessons // Dobijanje časova za studente
│ ├── GET /lessons/{id} // Dobijanje podataka o času po ID
│ ├── GET /lessons/{id}/short-data // Dobijanje kratkih informacija o času po ID
│ ├── PUT /lessons/{id}/approve // Potvrđivanje časa
│ ├── PUT /lessons/{id}/cancel // Otkazivanje časa
│ ├── PUT /lessons/{id}/finish // Završavanje časa
│ ├── GET /lessons/{id}/join // Pridruživanje času (generisanje tokena)
│ └── PUT /lessons/{id}/start // Početak časa (generisanje tokena)
│
├── Reviews
│ └── POST /review // Kreiranje recenzije
│
├── Teachers
│ ├── GET /teacher // Dobijanje podataka predavača (po JWT)
│ ├── POST /teacher // Registracija kao predavač
│ ├── GET /teacher/lessons // Dobijanje časova za predavača
│ ├── GET /teacher/schedule // Dobijanje rasporeda
│ ├── POST /teacher/schedule // Dodavanje vremena u raspored
│ ├── POST /teacher/skill // Registracija nove veštine za predavača
│ ├── GET /teachers/{id}/reviews // Dobijanje recenzija o predavaču po ID
│ ├── GET /teachers // Dobijanje podataka svih predavača
│ ├── GET /teachers/{id} // Dobijanje podataka predavača po ID
│ └── GET /teachers/{id}/schedule // Dobijanje rasporeda predavača po ID
│
└── Users
├── GET /user/profile // Dobijanje profila korisnika (po JWT)
├── PATCH /user/profile // Uređivanje profila korisnika
└── GET /users/{id}/profile // Dobijanje profila korisnika po ID
- Registracija novih korisnika
- Autorizacija postojećih korisnika
- Zaštićeno čuvanje tokena
- JWT-autentifikacija za zaštitu API-ja
Svaki korisnik može postati predavač, ako je spreman deliti svoja znanja. Za potvrdu vladanja veštinom neophodno je dostaviti video prezentaciju, postavljenu na YouTube.
- Upravljanje veštinama
- Raspored časova
- Statistika
- Recenzije (recenziju može ostaviti svaki korisnik koji je imao čas sa tim predavačem)
- Pretraga predavača
- Izbor vremena
- Potvrđivanje časova
- Otkazivanje časova
- Završavanje časova
- Održavanje onlajn časova putem video poziva
- Generisanje tokena za povezivanje sa LiveKit
- Interfejs za početak i pridruživanje času
- Ostavljanje recenzija nakon završetka časa
- Automatsko preračunavanje rejtinga predavača i veštine
- Pregled recenzija o predavačima
- TeacherListItem
Prikazuje kratke informacije o predavaču u listi, omogućavajući korisniku da brzo proceni profil i pređe na detaljan opis.
- TeacherProfilePage
Učitava detaljne informacije o predavaču po njegovom ID, uključuje podatke o veštinama, video prezentaciju, kao i recenzije korisnika.
- BookLesson
Obezbeđuje funkcionalnost izbora kategorije časova i vremena za rezervaciju časa kod izabranog predavača.
- Profile
Prikazuje lične informacije korisnika, statistiku, istoriju časova i stečene veštine, a takođe pruža mogućnosti za upravljanje profilom.
- SignUp/SignIn
Omogućava novim korisnicima da se registruju, a postojećim — da se bezbedno prijave u sistem.
- Requests
Prikazuje zahteve za održavanje časova za predavače, pružajući funkcionalnost za njihovo prihvatanje ili odbijanje.
- Teaching
Omogućava predavačima da upravljaju planiranim časovima, pregledaju statistiku, raspored i istoriju održavanja časova.
- SkillAdding
Omogućava korisnicima da dodaju nove veštine za predavanje, šaljući video prezentaciju i opis za proveru.
- EditProfile
Pruža korisnicima mogućnost da uređuju svoje lične informacije i menjaju avatar.
- RoomView
Obezbeđuje implementaciju video veze za održavanje onlajn časova korišćenjem LiveKit.
- Finish
Prikazuje informacije o završetku časa i pruža mogućnost ostavljanja recenzije o održanom času.
-
Višejezičnost:
Aplikacija podržava 5 jezika: ruski, srpski, engleski, nemački i francuski. Korisnici mogu birati željeni jezik u podešavanjima, što obezbeđuje udobnost i dostupnost za široku publiku. -
Promena teme aplikacije:
Aplikacija pruža mogućnost prebacivanja između svetle i tamne teme za optimalno opažanje interfejsa u svim uslovima osvetljenja.
- Projekat koristi PostgreSQL kao sistem za upravljanje bazama podataka
- Repozitorijum obrađuje inicijalizaciju tabela i uspostavlja veze između entiteta, uključujući tabele za korisnike, predavače, kategorije, veštine, rasporede, statuse, časove i recenzije
- Implementirani su trigeri za automatsko ažuriranje rejtinga predavača i veštine pri dodavanju novih recenzija
- Baza podataka je prethodno popunjena osnovnim podacima za kategorije i statuse kako bi se obezbedila pravilna funkcionalnost od samog početka
- Minio se koristi za čuvanje slika (avatara korisnika itd.)
- Implementiran je sistem upravljanja pristupom objektima
Projekat je upakovan u Docker kontejnere za olakšavanje deployment-a:
postgres
- baza podatakaminio
- objektno skladištenginx
- reverzni proksi serverapp-1
- bekend aplikacija
- Kloniranje repozitorijuma:
git clone https://github.com/LearnShareApp/learn-share-app.git
- Instalacija zavisnosti:
npm install
- Pokretanje projekta:
npx expo start
# ili
npx expo start -c
Bekend se deployuje korišćenjem Docker-a, što pojednostavljuje proces postavljanja.
Learn&Share predstavlja potpuno rešenje za razmenu znanja, koje objedinjuje savremene tehnologije razvoja kako na klijentskoj, tako i na serverskoj strani. Zahvaljujući promišljenoj arhitekturi, sistem obezbeđuje visoku skalabilnost, bezbednost i jednostavnost korišćenja.