* Fix project name overflow and add validation This commit addresses issue #971 by implementing both UI fixes and validation to prevent excessively long project names. Changes: 1. Add word-break and line-clamp to ProjectBanner.tsx to handle overflow gracefully with line-clamp-3 for names 2. Add frontend validation in ProjectModal.tsx limiting names to 6 words maximum 3. Add backend validation in project.js model with custom wordCount validator 4. Show user-friendly error messages when validation fails This ensures project names remain concise and UI-friendly while preventing the extreme overflow cases that were possible before. Fixes #971 * Add overflow-hidden to make line-clamp work properly The line-clamp utility requires explicit overflow-hidden to function correctly. Without it, the text continues to display in full rather than being truncated with ellipsis. * Fix line-clamp using inline CSS styles Tailwind's line-clamp utilities weren't working, so switched to using inline styles with the standard CSS approach: - display: -webkit-box - -webkit-line-clamp: 3 - -webkit-box-orient: vertical This ensures the text truncation works reliably across browsers. * Use Tailwind line-clamp utilities (already defined in CSS) The project already has line-clamp-1/2/3 utilities properly defined in tailwind.css with all the necessary webkit properties. Simplified the component to use these existing utilities instead of inline styles. * Add dedicated CSS classes with !important for line-clamp Created custom project-name-clamp and project-desc-clamp classes with !important flags to ensure they override any conflicting styles. This should finally fix the text truncation issue. * Use component-scoped styles for line-clamp Adding inline style tag in the component to ensure the line-clamp CSS is definitely loaded and applied. This bypasses any potential issues with external CSS compilation or loading order. * Change project name line-clamp from 3 to 2 lines Limiting project name display to 2 lines with ellipsis for better visual density and cleaner appearance. * Increase line-height for project name in banner Added line-height: 1.3 to project name for better readability and visual spacing between lines. |
||
|---|---|---|
| .github | ||
| backend | ||
| docs | ||
| e2e | ||
| frontend | ||
| public | ||
| screenshots | ||
| scripts | ||
| .dockerignore | ||
| .gitignore | ||
| .nojekyll | ||
| .prettierignore | ||
| .prettierrc.json | ||
| .sequelizerc | ||
| babel.config.js | ||
| CLAUDE.md | ||
| CNAME | ||
| CODE_OF_CONDUCT.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| index.html | ||
| jest.config.js | ||
| LICENSE | ||
| linguaisync.config.js | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| README.md | ||
| SECURITY.md | ||
| tailwind.config.js | ||
| tsconfig.json | ||
| webpack.config.js | ||
Productivity made simple
Organize your life and projects with a clear, hierarchical structure,
smart recurring tasks, and seamless Telegram integration.
Get focused, stay productive, and keep your data private.
More screenshots are available here.
🚀 How It Works
This app allows users to manage their tasks, projects, areas, notes, and tags in an organized way. Users can create tasks, projects, areas (to group projects), notes, and tags. Each task can be associated with a project, and both tasks and notes can be tagged for better organization. Projects can belong to areas and can also have multiple notes and tags. This structure helps users categorize and track their work efficiently, whether they’re managing individual tasks, larger projects, or keeping detailed notes.
🧠 Philosophy
For the thinking behind tududi, read:
- Designing a Life Management System That Doesn't Fight Back
- From Task to Table: How I Finally Got to the Korean Burger
✨ Features
- Task Management: Create, update, and delete tasks. Mark tasks as completed and view them by different filters (Today, Upcoming, Someday). Order them by Name, Due Date, Date Created, or Priority.
- Subtasks: Break down complex tasks into smaller, manageable subtasks with progress tracking and seamless navigation.
- Recurring Tasks: Comprehensive recurring task system with intelligent parent-child relationships:
- Multiple Recurrence Patterns: Daily, weekly, monthly, monthly on specific weekdays, and monthly last day
- Completion-Based Recurrence: Option to repeat based on completion date rather than due date
- Smart Parent-Child Linking: Generated task instances maintain connection to their original recurring pattern
- Direct Parent Editing: Edit recurrence settings directly from any generated task instance
- Flexible Scheduling: Set custom intervals (every 2 weeks, every 3 months, etc.)
- End Date Control: Optional end dates for recurring series
- Project Sharing & Collaboration: Share projects with team members and collaborate effectively
- Quick Notes: Create, update, delete, or assign text notes to projects.
- Tags: Create tags for tasks and notes to enhance organization.
- Project Tracking: Organize tasks into projects. Each project can contain multiple tasks and/or multiple notes.
- Area Categorization: Group projects into areas for better organization and focus.
- Due Date Tracking: Set due dates for tasks and view them based on due date categories.
- Responsive Design: Accessible from various devices, ensuring a consistent experience across desktops, tablets, and mobile phones.
- Multi-Language Support: Available in 24 languages with full localization support for a truly global productivity experience.
- Telegram Integration:
- Create tasks directly through Telegram messages
- Receive daily digests of your tasks
- Quick capture of ideas and todos on the go
- Open API & Access Tokens: Versioned Swagger docs exposed at
/api/v1plus personal API keys for integrating tududi with your own tooling or automations.
🗺️ Roadmap
Check out our GitHub Project for planned features and progress.
🛠️ Getting Started
Get up and running quickly with our comprehensive documentation:
Quick Start
docker pull chrisvel/tududi:latest
docker run \
-e TUDUDI_USER_EMAIL=admin@example.com \
-e TUDUDI_USER_PASSWORD=your-secure-password \
-e TUDUDI_SESSION_SECRET=$(openssl rand -hex 64) \
-v ~/tududi_db:/app/backend/db \
-v ~/tududi_uploads:/app/backend/uploads \
-p 3002:3002 \
-d chrisvel/tududi:latest
Navigate to http://localhost:3002 and login with your credentials.
Reverse Proxy Setup
When running behind a reverse proxy (Caddy, Nginx, Traefik, etc.), set TUDUDI_TRUST_PROXY so that Express correctly reads client IPs from X-Forwarded-For headers. Without this, express-rate-limit will log a validation error.
docker run \
-e TUDUDI_TRUST_PROXY=true \
-e TUDUDI_ALLOWED_ORIGINS=https://your-domain.com \
...
| Value | Meaning |
|---|---|
true |
Trust all proxies (simplest option for single-proxy setups) |
1 |
Trust the first hop only |
loopback |
Trust loopback addresses (127.0.0.1/::1) |
172.16.0.0/12 |
Trust a specific subnet |
📚 Documentation
For detailed setup instructions, configuration options, and getting started guides, visit:
- Installation Guide - Docker, development setup, and deployment
- Configuration - Environment variables and advanced settings
- First Steps - Learn the basics and get productive
- Project Sharing - Collaborate with your team
🚧 Development
Want to contribute or run Tududi from source? Check out our comprehensive development guide:
Quick overview:
# Clone and install
git clone https://github.com/chrisvel/tududi.git
cd tududi
npm install
# Start development servers
npm run backend:dev # Terminal 1 - Backend on :3001
npm run frontend:dev # Terminal 2 - Frontend on :8080
For database management, testing, and detailed development instructions, see docs.tududi.com
🔌 API
Tududi provides a comprehensive REST API for integration with external tools and automation workflows.
Base URL: http://localhost:8080/api/v1
Key Features:
- Complete CRUD operations for tasks, projects, notes, and areas
- Personal API keys for secure access
- Swagger documentation available at
/api-docs(requires authentication) - Support for recurring tasks, subtasks, and tag management
- Real-time task metrics and productivity insights
Authentication: Uses session cookies or Bearer token authentication. Generate personal API keys through the web interface for programmatic access.
Quick Example:
# Get all tasks
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3002/api/v1/tasks
# Create a new task
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Complete API documentation","priority":"medium"}' \
http://localhost:3002/api/v1/task
For full API documentation, visit /api-docs after authentication or check the Swagger schema definitions in backend/config/swagger.js.
🤝 Contributing
Contributions to tududi are welcome! Whether it's bug fixes, new features, documentation improvements, or translations, we appreciate your help.
Before you start:
- Check existing issues and discussions to avoid duplicate work
- For bugs, open an issue with the bug report template
- For feature requests, start a discussion
Quick contribution workflow:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following our code standards
- Run linting and tests:
npm run pre-push - Commit your changes with a clear message
- Push to your fork and open a Pull Request
Read our Contributing Guide for:
- Development setup and workflow
- Code standards and best practices
- Testing requirements
- Database migrations
- Translation guidelines
- Pull request checklist
💖 Support the Project
If you find tududi useful, consider supporting its development:
Your support helps keep tududi free, open-source, and actively maintained. Every contribution — big or small — makes a difference!
📜 License
This project is licensed under the MIT License.
📬 Contact
For questions or comments, please open an issue or contact the developer directly.
Join the tududi community:
🌟 Please check my other projects!
- Reconya - Network reconnaissance and asset discovery tool
- BreachHarbor - Cybersecurity suite for digital asset protection
- Hevetra - Digital tracking for child health milestones
Screenshots
README created by Chris Veleris for tududi.



