Modern React application built with Vite, featuring a complete frontend infrastructure for teaching full-stack development.
- Install dependencies:
npm install- Start development server:
npm run devsrc/
├── assets/
│ └── styles/ # SCSS modules
│ ├── basics/ # Core styles
│ ├── cmps/ # Component styles
│ ├── pages/ # Page styles
│ └── setup/ # SCSS variables & mixins
├── cmps/ # Reusable components
├── pages/ # Route components
├── services/ # API and utility services
└── store/ # Redux state management
├── actions/ # Action creators
└── reducers/ # State reducers
AppHeader- Navigation and user menuAppFooter- Footer with service statusUserMsg- Toast notificationsCarList- Grid display of cars with actionsCarFilter- Search and filter interfaceReviewList- User reviews with CRUD
CarIndex- Main car managementReviewIndex- Review systemUserDetails- User profileAboutUs- Static content with nested routesChat- Real-time messaging
Using Redux with the following modules:
carModule- Car CRUD operationsuserModule- Authentication and user datareviewModule- Review systemsystemModule- App-wide settings
// In component:
const cars = useSelector(state => state.carModule.cars)
const dispatch = useDispatch()
// Action dispatch:
dispatch(loadCars())car.service- Car CRUD operationsuser.service- Authentication & user managementreview.service- Review systemupload.service- File uploads
event-bus.service- Pub/sub messagingsocket.service- WebSocket connectionstorage.service- Local storage wrapperutil.service- Common helpers
Using SCSS modules with:
- CSS Grid for layouts
- Flexbox for component alignment
- CSS Variables for theming
- Responsive breakpoints
- Utility classes
.car-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: .5em;
}- Component Structure
export function MyComponent({ prop1, prop2 }) {
const [state, setState] = useState(null)
useEffect(() => {
// Side effects here
}, [])
return <section className="my-component">
{/* JSX */}
</section>
}- State Updates
// Correct:
setData(prevData => [...prevData, newItem])
// Avoid:
setData([...data, newItem])npm run dev- Start development servernpm run build- Production buildnpm run preview- Preview production buildnpm run test- Run tests
MIT
Coding Academy - Built with ❤️ for teaching modern fullstack development