Skip to content

IKetutWidiyane/umbra_notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŒ‘ Umbra Notes

A modern note-taking app with an elegant dark theme

React Native Expo TypeScript NativeWind Zustand

Umbra (Latin for "shadow") β€” your personal space for thoughts, ideas, and notes in the dark.


✨ Features

πŸ“ Note Management

  • Full CRUD Operations β€” Create, read, update, and delete notes with ease
  • 7 Categories β€” Personal, Work, Ideas, To-Do, Journal, Study, Other
  • 10 Note Colors β€” Customize your notes with a palette of colors
  • 5 Font Options β€” Choose from Inter, Poppins, Manrope, Merriweather, or System default
  • Rich Search β€” Search notes by title and content instantly
  • Category Filtering β€” Filter and organize notes by category

🎯 Organization

Feature Description
πŸ“Œ Pin Pin important notes to the top
⭐ Favorite Mark notes as favorites
πŸ“¦ Archive Archive notes you don't need
πŸ”’ Lock Secure notes with biometric authentication (Face ID / Fingerprint)

πŸ“Š Dashboard

  • Statistics Overview β€” Total notes, favorites, pinned items, and word count
  • Category Distribution β€” Visual breakdown of notes per category
  • Quick Actions β€” Fast access to favorites and pinned notes

πŸŒ™ Dark Themes

Theme Description
Obsidian Deep black background β€” the darkest theme
Carbon Sleek dark gray with bright accents
Charcoal Warm dark tone for comfortable reading
Slate Blue-tinged dark for a cooler aesthetic

πŸš€ Additional Features

  • πŸ“„ PDF Export β€” Export any note to a formatted PDF document
  • πŸ” Biometric Auth β€” Lock individual notes with Face ID or fingerprint
  • πŸ”” Notifications β€” Set reminders for important notes
  • πŸ“€ Sharing β€” Share notes directly from the app

πŸ“Έ Screenshots

Home Screen Dashboard Note Detail Editor
Browse & search notes View statistics Read & manage notes Create & edit notes

πŸš€ Quick Start

Prerequisites

  • Node.js >= 18.x
  • npm or yarn
  • Expo CLI (npm install -g expo-cli)
  • Expo Go app on your mobile device (iOS/Android) for testing

Installation

# Clone the repository
git clone https://github.com/IKetutWidiyane/umbra_notes.git
cd umbra-notes

# Install dependencies
npm install

# Start the development server
npm start

# Or launch directly on a specific platform
npm run android
npm run ios
npm run web

πŸ—οΈ Project Structure

umbra-notes/
β”œβ”€β”€ assets/                          # Static assets (icons, splash screen)
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ common/                  # Reusable components
β”‚   β”‚   β”‚   β”œβ”€β”€ CategoryBadge.tsx     # Category badge with icon
β”‚   β”‚   β”‚   β”œβ”€β”€ EmptyState.tsx        # Empty state placeholder
β”‚   β”‚   β”‚   β”œβ”€β”€ FAB.tsx               # Floating Action Button
β”‚   β”‚   β”‚   β”œβ”€β”€ Icon.tsx              # Icon wrapper component
β”‚   β”‚   β”‚   β”œβ”€β”€ LoadingIndicator.tsx  # Loading spinner
β”‚   β”‚   β”‚   β”œβ”€β”€ NoteCard.tsx          # Note preview card
β”‚   β”‚   β”‚   └── SearchBar.tsx         # Search input with clear button
β”‚   β”‚   β”œβ”€β”€ dashboard/               # Dashboard-specific components
β”‚   β”‚   β”‚   └── StatsCard.tsx         # Statistics card
β”‚   β”‚   └── note/                    # Note-specific components
β”‚   β”‚       └── NoteEditor.tsx        # Full note editor
β”‚   β”œβ”€β”€ constants/                   # App constants
β”‚   β”‚   β”œβ”€β”€ categories.ts            # Note categories definition
β”‚   β”‚   β”œβ”€β”€ colors.ts                # Color palette & themes
β”‚   β”‚   β”œβ”€β”€ fonts.ts                 # Font family configurations
β”‚   β”‚   └── themes.ts               # Theme management
β”‚   β”œβ”€β”€ database/                    # Data layer
β”‚   β”‚   β”œβ”€β”€ categoryRepository.ts    # Category CRUD operations
β”‚   β”‚   β”œβ”€β”€ noteRepository.ts       # Note CRUD operations
β”‚   β”‚   β”œβ”€β”€ sqlite.ts               # SQLite database initialization
β”‚   β”‚   β”œβ”€β”€ tagRepository.ts        # Tag CRUD operations
β”‚   β”‚   └── webDatabase.ts          # Web-compatible database fallback
β”‚   β”œβ”€β”€ hooks/                      # Custom React hooks
β”‚   β”‚   β”œβ”€β”€ useNotes.ts             # Note management hook
β”‚   β”‚   └── useTheme.ts            # Theme management hook
β”‚   β”œβ”€β”€ navigation/                 # Navigation configuration
β”‚   β”‚   └── AppNavigator.tsx        # Bottom tabs & stack navigator
β”‚   β”œβ”€β”€ screens/                    # Screen components
β”‚   β”‚   β”œβ”€β”€ CreateNoteScreen.tsx    # Create new note
β”‚   β”‚   β”œβ”€β”€ DashboardScreen.tsx     # Statistics dashboard
β”‚   β”‚   β”œβ”€β”€ EditNoteScreen.tsx     # Edit existing note
β”‚   β”‚   β”œβ”€β”€ HomeScreen.tsx         # Main notes list
β”‚   β”‚   └── NoteDetailScreen.tsx   # Note detail view
β”‚   β”œβ”€β”€ services/                   # Service layer
β”‚   β”‚   β”œβ”€β”€ biometricService.ts     # Biometric authentication
β”‚   β”‚   β”œβ”€β”€ notificationService.ts  # Push & local notifications
β”‚   β”‚   └── pdfService.ts          # PDF generation & export
β”‚   β”œβ”€β”€ store/                      # State management (Zustand)
β”‚   β”‚   β”œβ”€β”€ noteStore.ts           # Notes state & actions
β”‚   β”‚   β”œβ”€β”€ statisticsStore.ts     # Statistics state
β”‚   β”‚   └── themeStore.ts          # Theme state
β”‚   β”œβ”€β”€ types/                      # TypeScript type definitions
β”‚   β”‚   β”œβ”€β”€ Category.ts            # Category type
β”‚   β”‚   β”œβ”€β”€ Note.ts                # Note type
β”‚   β”‚   └── Tag.ts                 # Tag type
β”‚   └── utils/                      # Utility functions
β”‚       β”œβ”€β”€ dateUtils.ts           # Date formatting & relative time
β”‚       β”œβ”€β”€ idGenerator.ts         # Unique ID generation
β”‚       └── noteUtils.ts           # Note filtering & sorting helpers
β”œβ”€β”€ App.tsx                         # Application entry point
β”œβ”€β”€ app.json                        # Expo configuration
β”œβ”€β”€ tailwind.config.js              # Tailwind CSS / NativeWind config
β”œβ”€β”€ tsconfig.json                   # TypeScript configuration
└── package.json                    # Dependencies & scripts

πŸ› οΈ Tech Stack

Technology Purpose
React Native (0.74.0) Cross-platform mobile UI framework
Expo (~51.0.0) Development platform & toolchain
TypeScript (5.1.3) Type-safe JavaScript
NativeWind (2.0.11) Tailwind CSS for React Native
Zustand (4.5.0) Lightweight state management
Expo SQLite (~14.0.0) Local on-device database
React Navigation (6.x) Screen navigation (tabs + stack)
React Native Chart Kit Dashboard statistics visualization
React Native Linear Gradient Smooth gradient effects
Expo Local Authentication Biometric security (Face ID / Fingerprint)
Expo Notifications Local and push notifications
Expo Print / Expo Sharing PDF export and file sharing

πŸ—„οΈ Database Schema

Notes Table

CREATE TABLE notes (
  id          TEXT PRIMARY KEY,
  title       TEXT NOT NULL,
  content     TEXT NOT NULL,
  category    TEXT NOT NULL,
  color       TEXT NOT NULL,
  font        TEXT NOT NULL,
  pinned      INTEGER DEFAULT 0,
  favorite    INTEGER DEFAULT 0,
  archived    INTEGER DEFAULT 0,
  locked      INTEGER DEFAULT 0,
  reminder    TEXT,
  created_at  TEXT NOT NULL,
  updated_at  TEXT NOT NULL
);

Tags Table

CREATE TABLE tags (
  id       TEXT PRIMARY KEY,
  note_id  TEXT NOT NULL,
  tag_name TEXT NOT NULL,
  FOREIGN KEY (note_id) REFERENCES notes (id) ON DELETE CASCADE
);

πŸ”§ API / Hook Reference

useNotes()

const {
  notes,              // Note[] β€” All notes
  loading,            // boolean β€” Loading state
  error,              // string | null β€” Error message
  createNote,         // (data: CreateNoteDTO) => Promise<void>
  editNote,           // (id: string, data: EditNoteDTO) => Promise<void>
  removeNote,         // (id: string) => Promise<void>
  toggleFavorite,     // (id: string) => Promise<void>
  togglePin,          // (id: string) => Promise<void>
  toggleArchive,      // (id: string) => Promise<void>
  searchNotes,        // (query: string) => Promise<void>
} = useNotes();

useTheme()

const {
  colors,             // ThemeColors β€” Current theme color object
  setTheme,           // (theme: ThemeType) => void
  isDark,             // boolean β€” Always true (dark-only app)
} = useTheme();

🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the ISC License β€” see the LICENSE file for details.


πŸ™ Acknowledgements


Made with ❀️ by IKetutWidiyane

About

Umbra Notes: An elegant dark-themed note-taking app based on React Native (Expo). CRUD features, 7 categories, 10 colors, 4 themes, biometrics, PDF export, notifications, and a statistics dashboard. Stack: SQLite, Zustand, NativeWind.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors