A clean, fast, modern dictionary powered by Axios, React Query, Zustand (persist), shadcn/ui, and React Router.
This project is crafted with a smooth developer experience in mind — modular components, elegant routing, theme support, and delightful UI micro-interactions.
- Uses the free dictionaryapi.dev API
- Debounced search + error states
- Clean UI with
shadcn/ui
- Smooth play/pause button
- Handles edge cases (missing audio, blocking browsers)
- Animated loading placeholders using Tailwind
- Helps maintain visual flow while fetching
- Powered by Zustand + zustand/middleware persist
- Saved across page reloads
- Nicely styled history chips
- Click to auto-load a previous search
- Full app theme system
- Uses the shadcn/ui theme architecture
/→ dictionary search page/about→ about/project info- Layout with header, footer, nav, and theme toggle
| Layer | Technology |
|---|---|
| UI Components | shadcn/ui |
| State Management | Zustand (persist) |
| Data Fetching | React Query + Axios |
| Routing | React Router DOM |
| Styling | Tailwind CSS |
| Build Tool | Vite |
npm install
npm install @tanstack/react-query axios zustand zustand/middleware
npm install react-router-dom
npm install clsx tailwind-merge
npm install shadcn-ui --save-devRun the dev server:
npm run devsrc/
├─ components/
│ ├─ SearchBar.tsx
│ ├─ DictionaryCard.tsx
│ ├─ DefinitionBlock.tsx
│ ├─ AudioPlayer.tsx
│ ├─ SkeletonDef.tsx
│ └─ HistoryList.tsx
│
├─ store/
│ └─ useWordStore.ts
│
├─ lib/
│ └─ fetchDefinition.ts
│
├─ pages/
│ ├─ Home.tsx
│ └─ About.tsx
│
├─ layout/
│ └─ Layout.tsx
│
└─ main.tsx
Dictionary API — Free, no-auth, open source.
Base URL:
https://api.dictionaryapi.dev/api/v2/entries/en/<word>
- Minimalist yet expressive
- Smooth interactions, no noise
- Thoughtful spacing & typography
- Dark/light harmony
- A UX meant to breathe
Pull requests are welcome. For major changes, please open an issue first to discuss.
MIT License — open for learning, tweaking, and building.
Built with curiosity, discipline, and imagination — weaving tech and poetry into one crea