A modern platform where writers discover, create, and share captivating short stories, poetry, and flash fiction with a vibrant community of storytellers.
Neeva is a full-stack web application designed for writers and readers to connect through the art of concise storytelling. Built with modern web technologies, it provides an intuitive platform where creators can craft and share micro-fiction, poetry, and short stories while building engaged communities around their work.
Whether you're a seasoned author or an aspiring writer, Neeva empowers you to tell compelling stories where every word counts.
- Discover and read curated short stories organized by genre
- Intelligent prioritization algorithm to surface quality content
- View story metadata including word count, genre, and author details
- Track reading progress across your favorite stories
- Personalized library for bookmarks and saved stories
- Quick-access reading interface with story reader
- Organize stories into custom categories
- Track your reading history and preferences
- Advanced filtering by genre, author, and popularity
- Featured stories and trending content
- Search functionality to find specific stories and writers
- Category-based navigation for easy exploration
- Intuitive story editor powered by TipTap (rich text editor)
- Multi-step story creation workflow
- Support for story details, content editing, and publication
- Real-time preview and formatting
- Community feed to discover stories from other writers
- Category-based communities for genre-specific discussions
- Enhanced social interaction and writer collaboration
- Community search and filtering
- Nested comment system for story discussions
- Reply threads to foster conversations
- User avatars and profile integration
- Real-time comment notifications
- Customizable user profiles with profile images
- Author bio and story showcase
- Lens created by the user
- Reading statistics and engagement metrics
- Google OAuth integration for seamless sign-up
- Secure session management with Supabase
- Auto-refresh token handling
- Protected routes and user-specific data access
- Svelte 5 β Reactive UI framework with minimal JavaScript overhead
- SvelteKit β Full-stack framework for SSR and routing
- TypeScript β Type-safe development
- Tailwind CSS 4 β Utility-first CSS framework
- DaisyUI β Component library built on Tailwind
- Supabase β Open-source Firebase alternative
- PostgreSQL database
- Real-time subscriptions
- Row-level security policies
- Node.js β Server-side runtime
- TipTap β Headless rich text editor
- Iconify β Icon library integration
- svelte-french-toast β Toast notifications
- Vite β Lightning-fast build tool
- ESLint & Prettier β Code quality and formatting
- Vercel β Hosting platform with edge functions
- Environment variables β Secure configuration management
neeva/
βββ src/
β βββ components/ # Reusable Svelte components
β β βββ auth/ # Authentication components (Signin, Signup)
β β βββ bookdetail/ # Book detail view components
β β βββ Bookshelf/ # Bookshelf feature components
β β βββ browse/ # Browse & discovery components
β β βββ comment/ # Comment & discussion components
β β βββ community/ # Community components
β β βββ Create/ # Story creation components
β β βββ lens/ # Lens (story) related components
β β βββ Profile/ # User profile components
β β βββ Sidebar.svelte # Main navigation sidebar
β β
β βββ lib/ # Utility and service files
β β βββ supabase.ts # Supabase client initialization
β β βββ database.types.ts # TypeScript database types
β β βββ appStore.ts # Global state management
β β βββ utils.ts # Helper utilities
β β βββ lensPriorityCalc.ts # Story ranking algorithm
β β βββ compressImage.ts # Image compression utility
β β
β βββ routes/ # SvelteKit routes (file-based routing)
β β βββ +layout.svelte # Root layout
β β βββ +page.svelte # Home page
β β βββ (dashboard)/ # Protected dashboard routes
β β β βββ bookshelf/ # Bookshelf page
β β β βββ browse/ # Browse stories page
β β β βββ community/ # Community page
β β β βββ create/ # Story creation pages
β β β βββ lens/ # Lens hub page
β β β βββ profile/ # User profile page
β β βββ auth/ # Authentication routes
β β βββ signin/ # Sign in page
β β βββ signup/ # Sign up page
β β βββ callback/ # OAuth callback handler
β β βββ details/ # Profile details setup
β β
β βββ app.css # Global styles with Tailwind
β βββ app.html # HTML template
β βββ hooks.server.ts # Server-side hooks (auth middleware)
β
βββ static/ # Static assets
βββ tailwind.config.js # Tailwind configuration
βββ svelte.config.js # Svelte configuration
βββ tsconfig.json # TypeScript configuration
βββ vite.config.ts # Vite configuration
βββ package.json # Project dependencies
- Node.js 18+
- Yarn (package manager)
- Supabase account (for database and auth)
- Google OAuth credentials (for authentication)
-
Clone the repository
git clone https://github.com/yourusername/neeva.git cd neeva -
Install dependencies
yarn install
-
Set up environment variables Create a
.env.localfile in the project root:PUBLIC_SUPABASE_URL=your_supabase_url PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Start the development server
yarn dev
The application will be available at
http://localhost:5173
Configure the following in your Supabase project:
- Authentication: Enable Google OAuth provider
- URL Configuration: Add callback URLs for local and production environments
- Database: Set up required tables and row-level security policies
Neeva implements a secure OAuth2 authentication flow with Supabase:
-
User Initiates Login
- User clicks "Continue with Google" on signin/signup page
- Dynamic redirect URL based on current origin
-
OAuth Authorization
- Redirects to Supabase OAuth endpoint
- User authenticates with Google
- Supabase handles token exchange
-
Session Callback
/auth/callbackroute exchanges auth code for session- Server-side session validation
- User data loaded into global store
-
Session Management
- Client listens for auth state changes
- Auto-refresh tokens enabled
- Secure session persistence
- Global Store (
appStore.ts): Centralized state for user session, UI states - Svelte Stores: Reactive store pattern for component-level state
- Server-side Load Functions: Data fetching with server context
User Action β Component β Server Action β Database β Global Store β UI Update
- Row-level security (RLS) policies in Supabase
- Server-side session validation
- Protected routes with authentication checks
- Secure token handling with httpOnly cookies
# Development
yarn dev # Start development server with HMR
yarn check # Run TypeScript and Svelte checks
yarn check:watch # Run checks in watch mode
# Production
yarn build # Build for production
yarn preview # Preview production build locally
# Code Quality
yarn lint # Run ESLint and Prettier checks
yarn format # Format code with PrettierThe platform uses a sophisticated ranking system to surface quality stories:
- Engagement metrics (views, likes, comments)
- Freshness of content (newer stories prioritized)
- Author reputation and history
- Genre-specific trending
TipTap integration provides:
- Formatting options (bold, italic, links, lists)
- Markdown support
- Real-time preview
- Clean, accessible editor interface
Nested comment threading enables:
- Multi-level conversation threads
- Author identification with avatars
- Real-time updates (potential)
- Reply notifications
- Components: Small, reusable, single responsibility
- Stores: Centralized state management
- Routes: Organized by feature/domain
- Utilities: Pure functions for data transformation
- Full TypeScript coverage
- Generated database types from Supabase schema
- Type-safe components with props validation
- Unit tests for utility functions
- Component testing with Vitest
- Integration tests for API calls
- E2E tests with Playwright
- auth.users β User authentication (managed by Supabase)
- UserDetails β Extended user profile information
- Lens β Stories with metadata and content
- Comments β Comment threads and replies
- Likes β User engagement tracking
- Bookshelf β Saved stories per user
The project is configured for Vercel with:
- Automatic deployments from Git
- Edge function support
- Environment variable management
- Preview deployments for pull requests
- Vercel adapter for SvelteKit
- Fallback local adapter for development
- Optimized bundle splitting
- Reactivity: Svelte's fine-grained reactivity reduces boilerplate
- Performance: Compiler-based approach with minimal runtime
- DX: File-based routing and server hooks simplify development
- Full-stack: Unified development with server and client in one codebase
- Open-source: Community-driven with transparent development
- PostgreSQL: Powerful, mature database with RLS
- Real-time: Built-in real-time subscriptions
- Developer-friendly: Excellent documentation and tooling
- Tailwind CSS: Utility-first for consistency and rapid development
- DaisyUI: Pre-built components reduce custom CSS
- Dark mode: Tailwind's dark mode with DaisyUI support
Visit the live application: neevaverse.com
Main features showcase:
- Lens Hub: Discover stories by genre and trending
- Story Reader: Immersive reading experience
- Create: Write and publish your own stories
- Community: Engage with other writers
Contributions are welcome! To get started:
- Fork the repository
- Create a 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
- Follow existing code style (Prettier + ESLint)
- Write TypeScript for new features
- Test your changes locally with
yarn dev - Update documentation as needed
- Advanced search and filtering
- Reading time estimations
- User notifications system
- Collaborative writing features
- Story analytics for authors
- Content recommendations AI
- Mobile app (React Native)
- Real-time collaboration (WebSockets)
This project is private. All rights reserved.
Cedar β Building platforms for storytellers and writers
GitHub | Portfolio
- Supabase for the excellent backend-as-a-service platform
- Svelte and SvelteKit communities for amazing frameworks
- Tailwind CSS and DaisyUI for beautiful UI components
- All contributors and community members supporting the project
For questions or issues:
- Open an issue on GitHub
- Check existing documentation
- Review the Supabase documentation for backend questions
Happy writing! πβ¨