A modern time zone management application built with Next.js and shadcn/ui components.
- Multi-timezone Management: Add and manage multiple people across different time zones
- Real-time Updates: See current time across all time zones in real-time
- Interactive Timeline: Visual timeline showing day/night cycles for each time zone
- Modern UI: Beautiful, accessible interface built with shadcn/ui components
- Responsive Design: Works seamlessly on desktop and mobile devices
- Local Storage: Persists user data locally in the browser
- Framework: Next.js 14 with App Router
- UI Components: shadcn/ui with Radix UI primitives
- Styling: Tailwind CSS
- Icons: Lucide React
- Time Management: Spacetime library
- State Management: React hooks with local storage
- Node.js 18+
- npm or yarn
- Clone the repository:
git clone <repository-url>
cd time-zone-organizer- Install dependencies:
npm install- Start the development server:
npm run dev- Open http://localhost:3000 in your browser.
- Click the "Add Person" button in the bottom-left corner
- Enter a name for the person
- Select their time zone from the dropdown
- Use the time zone picker to change a person's time zone
- The timeline will automatically update to show the correct day/night cycle
- Use the datetime picker in the center of the screen to set your local time
- All other time zones will update accordingly
- Click the "Reset" button in the top-right corner
- Confirm the action to clear all saved data
src/
├── app/ # Next.js App Router
│ ├── globals.css # Global styles with Tailwind CSS
│ ├── layout.tsx # Root layout component
│ └── page.tsx # Home page
├── components/ # React components
│ ├── ui/ # shadcn/ui components
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── dialog.tsx
│ │ ├── input.tsx
│ │ └── select.tsx
│ ├── Entry.component.tsx # Individual time zone entry
│ ├── Timeline.component.tsx # Time visualization
│ └── TimezonePicker.component.tsx # Time zone selector
├── lib/ # Utility functions
│ ├── utils.ts # shadcn/ui utilities
│ └── ... # Time zone utilities
├── data/ # Static data
│ └── timezones.tsx # Time zone definitions
└── settings/ # Configuration
├── color.settings.tsx
└── hours.setting.tsx
- Button: For actions like "Add Person" and "Reset"
- Card: Container for time zone entries
- Dialog: Confirmation dialogs for destructive actions
- Input: Text input for names and datetime selection
- Select: Time zone picker with search functionality
- Entry: Displays a person's time zone information with timeline
- Timeline: Visual representation of day/night cycles
- TimezonePicker: Enhanced select component for time zone selection
The application uses Tailwind CSS with a custom color scheme that supports:
- Dark theme optimized for time zone visualization
- Responsive design for all screen sizes
- Accessible color contrasts
- Smooth animations and transitions
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLint
To add new shadcn/ui components:
- Install the component:
npx shadcn@latest add [component-name]- Import and use in your components:
import { ComponentName } from '@/components/ui/component-name';- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
- shadcn/ui for the beautiful component library
- Radix UI for accessible primitives
- Tailwind CSS for utility-first styling
- Lucide for the icon set
This project uses Husky to enforce running unit tests before every commit. If any test fails, the commit will be aborted.
After installing dependencies, run:
npm run prepare
This will set up the Husky hooks.
- On every
git commit, Husky will runnpm test. - If tests fail, the commit will not be created.