Skip to content

Latest commit

 

History

189 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GlassWave

Notes app with a glassmorphism UI. The real product is the React + Vite web app — it syncs through Firebase, works offline, and can be installed as a PWA or wrapped with Capacitor for Android/iOS.

Live: glasswave.pages.dev

License: MIT

There is also a Flutter port in glasswave_flutter_ver/. Its UI is a 1:1 port of the React design (same tokens, glass layers, themes and screens), but it stores everything on-device and does not talk to Firebase.

What it does

  • Create and edit notes in a TipTap rich-text editor (autosave)
  • Pin, archive, trash, search, sort, and set reminders
  • Sign in with email/password (reset + email verification) or stay a guest
  • Signed-in notes sync via Firestore; guests stay in the browser (localStorage)
  • Offline: Firestore IndexedDB cache on web, service-worker shell for the PWA
  • 12 color themes, UI in Russian / English / Korean
  • Reminders: in-app poller on web (only while the tab is open); native local notifications in the Capacitor apps

Layout

src/                    React + Vite app (this is the product)
  app/                  screens, editor, settings, note services
  i18n/                 translations — single source of truth
  hooks/                Firestore query hook
  styles/
  firebase.ts           Auth + Firestore client
  notifications.ts      reminder sound / native notifications
  pwa.ts
glasswave_flutter_ver/  Flutter port (local-only) — lib/, its platform
                        shells (android/ ios/ linux/ macos/ windows/),
                        pubspec.yaml and assets/translations/
android-capacitor/      Capacitor Android project
ios-capacitor/          Capacitor iOS project
src-tauri/              Tauri desktop shell (Linux AppImage / .deb)
docs/                   APK, iOS, PWA, desktop, notification sound
firestore.rules         owner-only notes + field/type/size checks

Web

Needs Node.js 18+ (22+ if you also build the APK).

git clone https://github.com/aalmaz1/glasswave.git
cd glasswave
npm install
npm run dev          # http://localhost:5173
npm run typecheck
npm run lint
npm run format:check
npm run test
npm run build
npm run preview      # production build + PWA service worker, :4173

Firebase

The web app already points at the official glasswave-4f5da project (Email/Password). You do not need a .env to log in.

To aim a fork or staging build at another project, copy .env.example to .env and set all six VITE_FIREBASE_* values from that project. Mixing keys from two projects is the usual cause of auth/operation-not-allowed.

If you override the config:

  • Enable Email/Password (the password provider, not Email link)
  • Add every host you serve from to Authentication → Settings → Authorized domains
  • Do not set VITE_FIREBASE_AUTH_EMULATOR unless the emulator is actually running

Do not commit .env. Security rules live in firestore.rules — the snippet that used to sit in this README was incomplete.

Native (same React app)

Capacitor wraps the web build. Flutter’s native trees stay in glasswave_flutter_ver/android/ and glasswave_flutter_ver/ios/.

Android APK — Node 22+, JDK 21, Android SDK (compileSdk 36):

npm run android:apk
# android-capacitor/app/build/outputs/apk/release/app-release.apk

Pushes to main also typecheck, lint, test, and publish a GitHub Release APK (.github/workflows/apk_build.yml). Details: docs/android-apk.md.

iOS — no CI (needs a Mac + Apple signing). Details: docs/ios-app.md.

npm run cap:sync:ios
open ios-capacitor/App/App.xcworkspace

Linux desktop (AppImage) — Tauri wraps the same web build in the system webkit (WebKitGTK), the same way Capacitor wraps it on Android. Needs Node 22+, a Rust toolchain, and libwebkit2gtk-4.1-dev (+ libayatana-appindicator3-dev librsvg2-dev libxdo-dev patchelf):

npm run desktop:build
# src-tauri/target/release/bundle/appimage/GlassWave_<version>_amd64.AppImage
# src-tauri/target/release/bundle/deb/glasswave_<version>_amd64.deb

Releases published by the APK workflow automatically get the matching AppImage and .deb attached (.github/workflows/appimage_build.yml); a manual build can be triggered from the Actions tab. The AppImage expects libwebkit2gtk-4.1 on the system — present on Ubuntu 22.04+/Debian 12/Fedora and friends.

PWA notes (install, offline shell, what reminders can and cannot do in the browser): docs/pwa.md. Notification sound across web / Android / iOS: docs/notification-sound.md.

Flutter port

Lives entirely in glasswave_flutter_ver/ and mirrors the React UI: same design tokens, glass layers, 12 themes, dashboard/editor/settings layout and the guest-first flow (sign-in lives inside Settings). Local-only — accounts are a SHA-256 hash in shared_preferences, no cloud sync.

cd glasswave_flutter_ver
flutter pub get
flutter run

Dart SDK ^3.12.2 (see glasswave_flutter_ver/pubspec.yaml).

Using the app

The dashboard is one screen with Notes / Archive / Trash tabs. Pinned notes sit at the top of Notes. Settings is a separate screen (account, theme, language, delete account).

Shortcut Action
Ctrl/Cmd + N New note (dashboard)
Ctrl/Cmd + F Focus search
Ctrl/Cmd + S Save (editor)
Esc Close editor / modal

i18n

src/i18n/translations.ts is the only place to add strings. After editing it:

npm run i18n:export    # regenerates glasswave_flutter_ver/assets/translations/{ru,en,ko}.json

License

MIT

About

GlassWave — offline-first, cross-platform notes app with a glassmorphism UI, TipTap rich-text editor, Firebase sync, reminders, 12 themes and RU/EN/KO i18n. Ships as PWA, Capacitor Android/iOS and Tauri desktop, with a Flutter port.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages