LaneUp is a modern, real-time task management application built with cutting-edge technologies. It provides a seamless experience for teams to collaborate, track progress, and manage projects efficiently.
- Real-time Collaboration: Instant updates across all users thanks to Convex
- Multiple Views: Board (Kanban), List, Table, and Timeline views
- Advanced Filtering: Filter by status, priority, userIds, labels, and more
- Drag & Drop: Intuitive task management with drag-and-drop support
- Rich Text Editor: Full-featured text editor with TipTap
- File Attachments: Upload and manage task attachments
- Comments & Activities: Track all changes and discussions
- Internationalization: Support for multiple languages
- Dark Mode: Built-in theme support
- Mobile Responsive: Works seamlessly on all devices
- Framework: Vue 3 (Composition API)
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: shadcn-vue
- State Management: Pinia
- Routing: Vue Router
- Build Tool: Vite
- Database: Convex (Real-time, serverless)
- Authentication: Clerk
- File Storage: AWS S3 / R2
- Editor: TipTap
- Drag & Drop: vue-draggable-plus
- i18n: vue-i18n
- Animations: Motion-v
- Icons: Lucide Vue
- Node.js 18+
- Bun (recommended) or npm
- Convex account
- Clerk account
-
Clone the repository
git clone https://github.com/yourusername/laneup.git cd laneup -
Install dependencies
bun install # or npm install -
Environment Variables Create a
.envfile in the root directory:# Convex VITE_CONVEX_URL=your_convex_deployment_url # Clerk VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key # Optional: S3/R2 for file uploads CONVEX_S3_ACCESS_KEY_ID=your_access_key CONVEX_S3_SECRET_ACCESS_KEY=your_secret_key CONVEX_S3_ENDPOINT=your_endpoint CONVEX_S3_BUCKET=your_bucket_name
-
Setup Convex
npx convex dev
This will:
- Create a new Convex project (if needed)
- Deploy your schema
- Start the Convex dev server
-
Run the development server
bun run dev # or npm run dev -
Open your browser Navigate to
http://localhost:5173
laneup/
βββ src/
β βββ components/ # Reusable UI components
β β βββ ui/ # shadcn-vue components
β β βββ task/ # Task-related components
β β βββ views/ # View components (board, list, etc.)
β β βββ selectors/ # Selection components
β βββ composables/ # Vue composables
β βββ stores/ # Pinia stores
β βββ pages/ # Route pages
β βββ types/ # TypeScript types
β βββ lib/ # Utilities and helpers
β βββ locales/ # i18n translations
β βββ main.ts # App entry point
βββ convex/
β βββ _generated/ # Auto-generated Convex files
β βββ modules/ # Domain modules
β βββ queries.ts # Shared queries
β βββ schema.ts # Database schema
β βββ schema.args.ts # Schema value definitions/table definition
βββ public/ # Static assets
βββ package.json # Project dependencies
Components follow a strict structure for consistency:
<template>
<div data-component="component-name">
<!-- Component content -->
</div>
</template>
<script setup lang="ts">
// Imports organized by type
import type { _TaskType } from '@/types'
import TaskCard from '@/components/task/TaskCard.vue'
import { useI18n } from '@/composables'
// Props & Emits
const props = defineProps<{
task: _TaskType
}>()
// Composables
const { t } = useI18n()
// Component logic
</script>The app uses Pinia stores with Convex integration:
export const useSpaceStore = defineStore('space', () => {
// Convex queries
const { data: tasks } = useConvexQuery(api.queries.getTasks, query)
// Reactive state
const currentProjectId = ref<ProjectId | null>(null)
// Actions
const selectProject = (id: ProjectId) => {
currentProjectId.value = id
}
return { tasks, currentProjectId, selectProject }
})The Convex schema defines the following tables:
users- User profilesworkspaces- Team workspacesprojects- Projects within workspacestasks- Individual tasksmembers- Workspace memberscomments- Task commentsactivities- Activity logsviews- Saved view configurations
bun run build
# or
npm run buildnpx convex deployThe built files in dist/ can be deployed to any static hosting service:
- Vercel
- Netlify
- AWS S3 + CloudFront
- Cloudflare Pages
# Run unit tests
bun run test
# Run type checking
bun run build:types
# Lint code
bun run lint- 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
Please read the Cursor Rules for code style guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- Vue.js - The Progressive JavaScript Framework
- Convex - The reactive database
- shadcn-vue - Beautiful UI components
- Tailwind CSS - Utility-first CSS framework
For support, email support@laneup.app or join our Discord community.
