Solemate — a modern shoe shop built with Next.js (TypeScript), Tailwind CSS and Material Symbols. The project is a learning / demo app where client-side features (useReducer + useContext) and many Next.js capabilities were explored. The site follows performance, accessibility and best-practice guidance, but is still a work in progress (mobile tweaks, dark mode and a few pages need polishing).
Live demo (Netlify): https://solemateshoes.netlify.app/
-
Next.js (TypeScript)
-
Tailwind CSS
-
Material Symbols (icons as fonts)
-
React useReducer + useContext for app state (cart/favorites)
-
ESLint, Prettier (where configured)
-
Site is under construction.
-
Mobile responsiveness and dark mode need improvement.
-
Favorites page, checkout flow and cart UX require further work.
-
SSR and hydration issues that were addressed (see notes below), but edge cases may remain.
-
Many client-side Next.js features used for learning (routing, API routes, image optimizations, dynamic routes, params).
General user/recruiter flow implemented end-to-end:
-
Home page: marketing, featured shoes.
-
Explore page: browse product list.
-
Apply filters and sort (client-side filtering implemented).
-
Click an item to view an individual shoe page (/explore/[id]).
-
Add to cart from list or product page.
-
Remove items from cart.
-
Add to favorites from product page (favorites page needs further work).
-
Accessibility: semantic HTML, alt text for images, focus management for modals and keyboard navigation considered.
-
Performance: image optimization using Next/Image, code-splitting, lazy-loading where beneficial, and best-practice meta tags.
-
SSR & hydration: dynamic content is server-rendered where appropriate and hydrated client-side. Common hydration mismatches were fixed.
-
Tailwind fixes: corrected purge/content config, resolved class name generation issues that caused missing styles in production.
-
State management: useReducer drives cart/favorites logic; useContext exposes state/actions to components — simple, testable and easy to extend.
-
Testing & linting: run available scripts (if present) to check style and correctness.
-
Accessibility & best practices from web.dev were consulted when implementing features.
-
app/ routes
-
components/ — UI components
-
public/ — static assets
-
styles/ — Tailwind entry / global styles
-
context/ — hooks, reducers and context providers
-
utils/ — utilities for data fetching, filtering
Clone:
git clone <repository-url>
cd <repo-folder>Install dependencies:
# npm
npm install
# or yarn
yarn install
# or pnpm
pnpm installRun development server:
# npm
npm run dev
# yarn
yarn dev
# pnpm
pnpm devBuild & run production locally:
# build
npm run build
# start
npm startNetlify supports Next.js in multiple ways. Two common approaches:
-
Static export (if your app can be fully exported):
npm run build npm run export # produces /out # then deploy with Netlify CLI netlify deploy --prod --dir=out
-
Full Next.js on Netlify (server functions / adapter):
-
Use Netlify's Next.js plugin or a community adapter. Configure build command as
npm run buildand follow Netlify docs for Next.js deployments. -
Ensure required environment variables are set in Netlify dashboard.
-
