Skip to content

devmadhava/Memoiry

Repository files navigation

Memoiry – Digital Journaling App 📔

Memoiry is a React Native journaling app built with Expo and Gluestack UI, designed to let users record and revisit memories, thoughts, and daily experiences offline. It supports rich text, optional images, local notifications, and intuitive navigation following Google Material Design guidelines.


Quick Start

Clone the repository, install dependencies with npm install, and set up your development environment. Use the following commands to get started:

# Install dependencies
npm install

# Start the app
npx expo start

You can preview the app in:


Features

  • Journaling: Create, read, update, and delete journal entries (CRUD).
  • Rich Text Editor: Format text and attach optional images.
  • Daily Reminders: Set notifications to remind you to journal.
  • Offline Support: SQLite-based local data persistence.
  • Data Export: Export journal data as a SQLite file for backup.
  • Reset Functionality: Clear all data and start fresh.
  • Responsive Design: Optimized for various screen sizes.
  • Accessible UI: Designed with accessibility in mind.

Technology Stack

  • React Native + Expo: Managed workflow for cross-platform development.
  • Expo Router: File-based navigation for intuitive routing.
  • Gluestack UI: Consistent and responsive UI components.
  • SQLite: Local database for offline data storage.
  • Zustand: Lightweight state management.
  • Jest: Unit and snapshot testing.
  • TypeScript: Type safety and improved developer experience.

Project Structure

The Memoiry app follows a modular and organized folder structure to ensure maintainability, scalability, and clear separation of concerns.

.
├── README.md          # Project overview and setup instructions
├── app                # Main source code directory
│   ├── _layout.tsx    # Root layout for navigation
│   ├── index.tsx      # Home screen
│   ├── profile-setup.tsx # Profile setup screen
│   └── (tabs)         # Tab-based navigation
│       ├── _layout.tsx # Tab layout
│       ├── create.tsx # Create journal entry
│       ├── search.tsx # Search journal entries
│       └── user       # User-related screens
│           ├── _layout.tsx # User tab layout
│           ├── edit.tsx    # Edit user profile
│           └── index.tsx   # User options
├── assets             # Static assets like images, fonts, icons
├── components         # Reusable UI components
│   ├── buttons        # Button components
│   ├── cards          # Card components
│   ├── form           # Form inputs
│   ├── headers        # Screen headers
│   ├── navigation     # Navigation components
│   └── ui             # General UI components
├── configs            # App configuration files
├── constants          # Global constants used across the app
├── hooks              # Custom React hooks
├── locales            # Localization files for multiple languages
├── models             # SQLite data models
├── scripts            # Utility scripts
├── services           # Database and business logic services
│   ├── dates.ts       # Date utilities
│   ├── file-system.ts # File system operations
│   └── sqlite         # SQLite database operations
├── store              # Zustand state management stores
├── styles             # Global and reusable styles
└── tests              # Unit tests

Development

Reset Project

To reset the project and start fresh:

npm run reset-project

This will clear existing data and reset the app to its initial state.

Export Data

To export journal data as a SQLite file, use the Export Data option in the user tab. The exported file will be saved locally on your device.

Testing

Run unit tests using Jest:

npm test

Learn More


Community

About

Journal application in Development

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published