My personal website: jacobniv.xyz
A modern, responsive portfolio website showcasing engineering projects, experience, and skills. Built with Astro and Svelte, featuring dark/light mode support and smooth scroll-based navigation.
Clone the repository:
git clone <repository-url>
cd absolute-altitude
Install dependencies:
bun install
Or with npm/yarn:
npm install
# or
yarn install
Start the development server:
bun dev
The site will be available at http://localhost:4321
Build for production:
bun build
The production-ready files will be in the dist/ directory.
Preview the production build locally:
bun preview
absolute-altitude/
āāā public/
ā āāā pics/ # Project images
ā āāā jn_resume.pdf # Resume PDF
āāā src/
ā āāā layouts/
ā ā āāā Layout.astro # Base HTML layout
ā āāā pages/
ā ā āāā index.astro # Main page entry point
ā āāā lib/
ā ā āāā components/
ā ā ā āāā About.svelte # About section with contact info
ā ā ā āāā Experience.svelte # Work experience timeline
ā ā ā āāā Header.svelte # Desktop navigation header
ā ā ā āāā MobileHeader.svelte # Mobile navigation header
ā ā ā āāā ModeToggle.svelte # Dark/light mode toggle
ā ā ā āāā Portfolio.svelte # Main container component
ā ā ā āāā projects/ # Individual project components
ā ā ā ā āāā CustomFidgets.svelte
ā ā ā ā āāā ProstheticHand.svelte
ā ā ā ā āāā MillenniumFalcon.svelte
ā ā ā ā āāā Hammer.svelte
ā ā ā ā āāā CarpetSweeper.svelte
ā ā ā āāā ui/ # Reusable UI components
ā ā ā āāā button/
ā ā āāā utils.svelte.ts # Utility functions
ā āāā styles/
ā āāā global.css # Global styles and CSS variables
āāā package.json
Main container that manages page layout and active section state. Handles scroll-based section detection and coordinates navigation.
Both headers feature:
About section with professional summary, resume download, and contact buttons (Email, LinkedIn).
Each project follows a consistent structure with:
The site uses scroll-based navigation that automatically highlights the current section:
src/lib/components/projects/:
```svelteImport and add it to Portfolio.svelte
Update navigation in Header.svelte and MobileHeader.svelte:
const projectItems = [
// ... existing items
{ id: 'new-project-id', label: 'Project Label' }
];
Edit src/lib/components/About.svelte to update:
Styles are managed through Tailwind CSS. Key customization points:
src/styles/global.css (CSS variables)src/layouts/Layout.astro (Google Fonts)| Command | Description |
|---|---|
bun dev |
Start development server |
bun build |
Build for production |
bun preview |
Preview production build |
bun astro ... |
Run Astro CLI commands |
[Add your license here]
Jacob Niv - Biomedical Engineer
For detailed development information, see AGENTS.md (if available).