A full-stack web application for managing and receiving daily reminders of book highlights and personal quotes with Kindle import functionality.
- User Authentication: Secure email/password registration and login with JWT sessions
- Highlight Management: Add, edit, delete, and organize your book highlights and quotes
- Kindle Import: Upload and parse Kindle highlight exports (.txt, .csv files)
- Favorites System: Mark highlights as favorites for prioritization in daily reminders
- Daily Email Reminders: Automated daily emails with up to 10 curated highlights
- Search & Filter: Find highlights by text, source, or tags
- Responsive Design: Mobile-friendly interface with dark mode support
- Settings Management: Configure email preferences and reminder timing
- React 18 with TypeScript
- Vite for build tooling
- TailwindCSS for styling
- Shadcn/ui component library
- Wouter for routing
- TanStack Query for data fetching
- React Hook Form with Zod validation
- Node.js with Express
- TypeScript
- MongoDB with Mongoose ODM
- JWT authentication with bcrypt
- File upload with Multer
- Email sending with Nodemailer
- Scheduled jobs with node-cron
- Node.js 20 or higher
- npm or yarn
- Clone the repository:
git clone <your-repo-url>
cd recollection- Install dependencies:
npm install- Set up environment variables:
# Database configuration (required)
MONGODB_URI=mongodb://localhost:27017/recollection
# Email configuration (optional - for daily reminders)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
APP_URL=http://localhost:5000- Start MongoDB:
# Using MongoDB service
mongod
# Or using Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest- Start the development server:
npm run devThe application will be available at http://localhost:5000
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Utilities and configurations
│ │ ├── pages/ # Page components
│ │ └── main.tsx # Application entry point
│ └── index.html
├── server/ # Backend Express application
│ ├── middleware/ # Express middleware
│ ├── services/ # Business logic services
│ ├── utils/ # Utility functions
│ ├── index.ts # Server entry point
│ ├── routes.ts # API routes
│ └── storage.ts # Data storage layer
├── shared/ # Shared types and schemas
│ └── schema.ts # Database schema and validation
└── package.json
POST /api/auth/register- Create new user accountPOST /api/auth/login- User loginPOST /api/auth/logout- User logoutGET /api/auth/me- Get current user info
GET /api/highlights- Get user's highlights (paginated)POST /api/highlights- Create new highlightPATCH /api/highlights/:id- Update highlightDELETE /api/highlights/:id- Delete highlightPOST /api/highlights/:id/favorite- Toggle favorite statusGET /api/highlights/favorites- Get favorite highlights
POST /api/import/kindle- Import highlights from Kindle file
GET /api/stats- Get user statisticsPATCH /api/user/preferences- Update email preferences
The application supports importing highlights from Amazon Kindle:
- Export your highlights from read.amazon.com
- Save as .txt or .csv file
- Upload through the import interface
- Highlights are automatically parsed and deduplicated
- Configurable timing (6 AM - 8 PM)
- Prioritizes favorite highlights
- Sends up to 10 highlights per day
- Tracks sent highlights to avoid repetition
- Beautiful HTML email template
- MongoDB database with Mongoose ODM
- Proper data validation with Zod schemas
- Type-safe API with TypeScript
- Schema validation and data modeling
The application is designed to work seamlessly with:
- Replit Deployments
- Vercel
- Netlify
- Railway
- Any Node.js hosting platform
For production deployment:
- Set up environment variables for email configuration
- Configure database connection (if using PostgreSQL)
- Build the application:
npm run build - Start the production server:
npm start
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes
- Add tests if applicable
- Commit your changes:
git commit -m 'Add feature-name' - Push to the branch:
git push origin feature-name - Submit a pull request
This project is licensed under the MIT License. See the LICENSE file for details.
For support, email your-email@example.com or create an issue in the GitHub repository.