- A single page application (SPA) with working responsive web design (RWD). (I designed and built everything from scratch.)
- Built with Svelte (upgraded to Svelte 5 syntax), SvelteKit and Bootstrap with TypeScript support.
- Deployed to Github Pages and run Dependabot PR test build using Github Action workflows.
The site switches between two layouts - "main" and "view".
Index page with large navigation cards.
flowchart TD
subgraph n0 ["Page (Main Mode)"]
direction TB
n1[NameTitle];
subgraph n2 [Columns];
subgraph n3 [Column 1];
direction TB
n4[ViewItemCard 1];
n5[ViewItemCard 3];
n6[...];
n4-.-n5-.-n6;
end
subgraph n7 [Column 2];
direction TB
n8[ViewItemCard 2];
n9[ViewItemCard 4];
n10[...];
n8-.-n9-.-n10;
end
end
n11[Footer];
n1-.-n3;
n1-.-n7;
n3-.-n11;
n7-.-n11;
end
By clicking the button on a view card, the app will switch to view mode that shows the corresponding content.
Detail page with side navigation bar and content.
flowchart TD
subgraph n0 ["Page (View Mode)"]
direction TB
subgraph n1 [Columns]
direction LR
subgraph n2 [Column 1]
direction TB
n3[NameTitle];
subgraph n4 [Nav Btns]
direction TB
n5[ViewItemNavBtn 1];
n6[ViewItemNavBtn 2];
n7[...];
n5-.-n6-.-n7;
end
n3-.-n4;
end
subgraph n8 [Column 2]
direction TB
n9[ViewItemHead];
n10[ViewItemContent];
n9-.-n10;
end
end
n11[Footer];
n2-.-n11;
n8-.-n11;
end
The viewer can click the nav bar buttons to switch the view content, or go back to the main mode.
The index page also accepts a view
URL parameter to switch to a specific view (although it's still done in SPA - shallow routing - instead of using SvelteKit routing), which makes it useful to be linked elsewhere.
Page | Function |
---|---|
page.svelte |
Main SPA page |
error.svelte |
Error page |
layout.svelte |
Load CSS/fonts, set header tags and wrap error handling |
Folder | Function |
---|---|
common |
Components for general content purposes |
site |
Components for non-general nor non-viewitem functions |
viewitem |
Components for displaying view item |
viewitem-content |
Components of the view item content |
Each mode may have multiple layout and style adjustments based on different inner widths (1200
, 992
, 768
and 576
px), utilizing one or multiple of the following approaches:
- Svelte template syntax
- Bootstrap classes
- Vanilla CSS (
/src/css/custom.css
)
Both main and view mode will be squashed into a single column when the screen width becomes smaller than 992
px.
Some reusable components, like Image
and Showcase
, has properties to control the component responsive behavior under different inner widths.
This app is designed that most of the web content are stored as JSON files under /src/lib/data/
and can be modified quickly.
Folder | Function |
---|---|
info |
Personal and view item information |
lists |
Content for Career , Links or other lists |
works |
Content for Portfolio (either lists or showcases) |
Many fields of lists and showcases, like description, footnote and tooltip, as well as the Image
footnote, support inline HTML tags. Note that <a href="..."></a>
will be automatically applied Bootstrap classes.
Site images are stored under /static/
:
Folder | Function |
---|---|
about-me |
Personal-related images (<= 800px in width) |
main |
Banner images for view items (should be 800x400 px) |
website |
Utility images for website, including thumbnail |
work |
Showcase work images; should be 800px in height (book covers) or width (Maker projects)) |
To add a new "page" in the site:
- Add a "view item" component under
/src/lib/components/viewitem-content
. - Add a 800x400 px JPEG image under
/static/main
. - Add an entry in
/src/lib/data/info/ViewItems.json
with correct component file name and image URL.
The site would use dynamic importing to take care the rest.
Prerequisites: Node.js, Git and Docker. This repo can be opened in DevContainer/CodeSpace as well.
Install Yarn:
npm i -g yarn@latest
Windows users would need to grant permission for Yarn in PowerShell (as Administrator) with
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
.
Then
git clone https://github.com/alankrantas/alankrantas.github.io.git
cd alankrantas.github.io
yarn
Command | Description |
---|---|
yarn upgrade-all |
Upgrade all NPM dependencies. |
yarn start |
Start a local dev server and open http://localhost:3000 . |
yarn check |
Sync SvelteKit files. Run after installation and before build. |
yarn lint |
Lint files. |
yarn format |
Format and prettify files. |
yarn build |
Build a local production at ./build . |
yarn serve |
Serve the local production and open http://localhost:8080 . |
yarn pull |
Pull commit histories from main branch. |
yarn push |
Push changes to main branch. |
yarn commit |
yarn pull + yarn format + yarn commit |
yarn docker-build |
Build a Docker container image |
yarn docker-run |
Run the Docker container and open http://localhost:8080 . |
yarn docker-stop |
Stop the Docker container. |
yarn docker |
yarn docker-build + yarn docker-run |
The Docker build and Github Action Workflow would generate a timestamp under /static/website/build.json
in the production, which will be read by footer component.
See what would happen if you try to access an invalid path. :)