A brutalist-designed portfolio website showcasing music, podcasts, blog posts, and creative work with secure API integrations.
npm run startThis will automatically:
- Clean up any existing processes on port 5173
- Start the Vite development server
- Display helpful information and URLs
# Using the Node script directly
node dev-server.js
# Traditional Vite command
npm run dev- Node.js (v16 or higher)
- npm or yarn
- Clone the repository:
git clone https://github.com/yourusername/tisb-world.git
cd tisb-world- Install dependencies:
npm install- Start the development server:
npm run start- Open your browser to
http://localhost:5173
- Home:
http://localhost:5173/- Main landing page - Blog:
http://localhost:5173/blog- Brutalist blog grid from Substack - Podcast:
http://localhost:5173/podcast- YouTube video grid - Music:
http://localhost:5173/music- Music portfolio - Timeline:
http://localhost:5173/timeline- Chronological content view
Run the cleanup script:
./cleanup-dev.shOr manually kill the process:
lsof -ti:5173 | xargs kill -9- Check for syntax errors: Look for TypeScript/JavaScript errors in the console
- Clear cache:
rm -rf node_modules/.vite npm install
- Check Node version: Ensure you're using Node.js v16+
node --version
- Hard refresh:
Cmd+Shift+R(Mac) orCtrl+Shift+R(Windows/Linux) - Check browser console: Look for any JavaScript errors
- Disable browser extensions: Try in incognito/private mode
- Vite has hot module replacement (HMR) - saves should auto-reload
- If HMR fails, manually refresh the page
- For persistent issues, restart the dev server
tisb-world/
├── src/
│ ├── components/ # React components
│ │ ├── BrutalistVideoGrid.tsx
│ │ ├── BrutalistBlogGrid.tsx
│ │ └── ...
│ ├── pages/ # Page components
│ │ ├── Blog.tsx
│ │ ├── Podcast.tsx
│ │ └── ...
│ ├── services/ # API services
│ │ └── contentService.ts
│ └── hooks/ # Custom React hooks
├── public/ # Static assets
├── index.html # Entry HTML
└── vite.config.ts # Vite configuration
- Brutalist Design: Bold typography, harsh shadows, asymmetric layouts
- Dynamic Content: Pulls from YouTube RSS and Substack feeds
- Responsive: Mobile-first design approach
- Performance: Lazy loading, caching, and optimized images
- Interactive: Hover effects, animations, and smooth transitions
# Start development server with auto-cleanup
npm run start
# Start development server (standard)
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Run linter
npm run lint
# Clean development environment
./cleanup-dev.shThis is a syntax error in the TypeScript files. Check the file mentioned in the error and look for mismatched brackets.
The app uses multiple CORS proxy fallbacks. If all fail, the content service will return empty results gracefully.
First visit fetches data from external sources. Subsequent visits use:
- 30-minute memory cache
- localStorage persistence
- Browser HTTP cache
- Initial Load: First visit may take 2-3 seconds to fetch external content
- Caching: Content is cached for 30 minutes to improve performance
- Lazy Loading: Images load only when visible to save bandwidth
- Load More: Videos and posts load in batches to improve initial render
- Auto-reload: Vite provides fast HMR - just save your files
- TypeScript: Full TypeScript support with type checking
- React DevTools: Install browser extension for component debugging
- Network Tab: Monitor API calls and loading performance
For issues or questions, contact: rajeev@theideasandbox.com