A modern contact management application built with Remix, React Router v7, and TypeScript based on the tutorial in the Remix Documentation. Features contact creation, editing, deletion, and avatar management with SQLite storage.
- Contact Management: Create, read, update, and delete contacts
- Avatar Support: Upload and manage contact avatars
- Favorites: Mark contacts as favorites
- Real-time Search: Search through contacts
- Database Storage: Persistent storage using SQLite
- Modern UI: Clean interface built with Tailwind CSS
- Framework: Remix
- Routing: React Router v7 (Pre-release)
- Styling: Tailwind CSS
- Database: SQLite (via better-sqlite3)
- Language: TypeScript
- Image Handling: Base64 encoding for avatar storage
contact-manager/
├── app/
│ ├── routes/ # Application routes
│ │ ├── index.tsx # Home page
│ │ ├── contact-details.tsx # Contact details view
│ │ ├── edit-contact.tsx # Contact editing form
│ │ └── delete-contact.tsx # Contact deletion handler
│ ├── server/ # Server-side operations
│ │ └── index.ts # Database operations
│ ├── components/ # Reusable components
│ ├── styles/ # CSS and styling
│ └── root.tsx # Root layout
├── public/ # Static assets
└── build/ # Production build
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Start production server
npm run start
- Node.js >= 20.0.0
- npm or yarn
- SQLite
- Clone the repository
- Install dependencies:
npm install
- Start the development server:
npm run dev
npm run dev
- Start development servernpm run build
- Build for productionnpm run start
- Start production servernpm run typecheck
- Run type checkingnpm run lint
- Run ESLint
interface Contact {
id: number;
first: string;
last: string;
twitter: string;
notes: string;
favorite: boolean;
avatar: string; // Base64 encoded image
}
/
- Home page with contact list/contacts/:id
- View contact details/contacts/:id/edit
- Edit contact/contacts/:id/delete
- Delete contact
- Avatar uploads are size-limited and validated
- SQL injection protection via prepared statements
- Input sanitization on all form submissions
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- React Router team for v7 pre-release
- Remix team for the framework
- SQLite team for the database
- All contributors and users
For support, please open an issue in the GitHub repository or contact the maintainers.