Compare commits

..

178 Commits

Author SHA1 Message Date
luke-else f3afc0917e feat: Added svelte devcontainer
Build and Push Latest Docker Image / build-and-push (push) Successful in 1m0s
Build and Push Development Docker Image / build-and-push (push) Successful in 17s
2026-03-30 16:19:55 +01:00
luke-else d792eb1d1d feat: Removed devcontainer folder
Build and Push Latest Docker Image / build-and-push (push) Has been cancelled
2026-03-30 16:17:56 +01:00
luke-else 275b92eec0 Merge pull request 'feat: Updated devcontainer' (#57) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 18s
Reviewed-on: #57
2025-10-21 21:49:39 +00:00
luke-else 38edb64728 feat: Updated devcontainer
Build and Push Development Docker Image / build-and-push (push) Successful in 1m4s
2025-10-21 22:44:32 +01:00
luke-else 1070662164 Merge pull request 'feature/devcontainer' (#55) from feature/devcontainer into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 1m4s
Build and Push Development Docker Image / build-and-push (push) Successful in 17s
Reviewed-on: #55
2025-09-26 09:18:23 +00:00
luke-else 9a36a46ad1 chore: Removed run command from devcontainer 2025-09-25 23:34:11 +01:00
luke-else 558bca7f56 fix: Linting 2025-09-25 23:29:30 +01:00
luke-else bc7099d627 chore: Updated comments 2025-09-25 23:13:39 +01:00
luke-else f71b054ae5 feat: Added dev-container 2025-09-25 22:03:37 +01:00
luke-else 0e09633e83 Merge pull request 'development' (#54) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 17s
Reviewed-on: #54
2025-09-18 20:04:15 +00:00
luke-else a83022c46e fix: Updated to use latest version of component lib and fixed overflow issue on repos page
Build and Push Development Docker Image / build-and-push (push) Successful in 58s
2025-09-18 20:58:59 +01:00
luke-else b1944e64d9 fix: Cleaned up pages
Build and Push Development Docker Image / build-and-push (push) Successful in 1m6s
2025-09-18 19:40:58 +01:00
luke-else 188f4616ea fix: Add required .npmrc into dockerfile
Build and Push Development Docker Image / build-and-push (push) Successful in 1m1s
2025-09-16 11:44:35 +01:00
luke-else de33ca3814 Merge pull request 'feat: Implemented use of new component lib' (#52) from feat/component-lib into development
Build and Push Development Docker Image / build-and-push (push) Failing after 44s
Reviewed-on: #52
2025-09-16 10:41:07 +00:00
luke-else e9143bfdf4 feat: Implemented use of new component lib 2025-09-16 11:40:16 +01:00
luke-else 87ff7e5dbd feat: Added floating git icon to page
Build and Push Development Docker Image / build-and-push (push) Successful in 1m1s
2025-09-11 00:58:52 +01:00
luke-else 8aea5bc94f Merge pull request 'development' (#51) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 1m1s
Reviewed-on: #51
2025-09-10 23:12:02 +00:00
luke-else dc00eff17c Merge pull request 'fix: Corrected duplicated build stage in dockerfile' (#50) from chore/base-image into development
Build and Push Development Docker Image / build-and-push (push) Successful in 50s
Reviewed-on: #50
2025-08-01 19:32:46 +00:00
luke-else fe36594189 fix: Corrected duplicated build stage in dockerfile 2025-08-01 20:32:01 +01:00
luke-else aa8e55c9a6 Merge pull request 'chore: Updated dockerfile to use new base image for smaller container sizes' (#49) from chore/base-image into development
Build and Push Development Docker Image / build-and-push (push) Failing after 15s
Reviewed-on: #49
2025-08-01 19:28:57 +00:00
luke-else e2b276dc0e chore: Updated dockerfile to use new base image for smaller container sizes 2025-08-01 20:27:11 +01:00
luke-else 6721dc5eef Merge pull request 'development' (#47) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 26s
Reviewed-on: #47
2025-05-30 20:06:18 +00:00
luke-else 6c5d16ef7a Merge pull request 'CHORE: Added additional skills and ehanced the way that links are displayed in raw html containers' (#46) from feature/recent-experience into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m19s
Reviewed-on: #46
2025-05-30 20:00:27 +00:00
luke-else 03b95a6c8c CHORE: Added additional skills and ehanced the way that links are displayed in raw html containers 2025-05-30 18:26:06 +01:00
luke-else 962e3614e3 Merge pull request 'CHORE: Updated latest experience for the site' (#45) from feature/recent-experience into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m25s
Reviewed-on: #45
2025-05-30 15:44:45 +00:00
luke-else 63c84e1430 CHORE: Updated latest experience for the site 2025-05-30 16:43:00 +01:00
luke-else 3b2a8a6611 Merge pull request 'development' (#44) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #44
2025-05-27 21:24:09 +00:00
luke-else 9028175ae4 FEAT: Added icons back into the skills section
Build and Push Development Docker Image / build-and-push (push) Successful in 1m19s
2025-05-27 22:00:53 +01:00
luke-else 280c8e15ad CHORE: corrected indentation
Build and Push Development Docker Image / build-and-push (push) Successful in 38s
2025-05-27 00:41:59 +01:00
luke-else e081a0cb3e HOTFIX: Corrected display of timeline description
Build and Push Latest Docker Image / build-and-push (push) Successful in 1m24s
Build and Push Development Docker Image / build-and-push (push) Successful in 26s
2025-05-27 00:35:18 +01:00
luke-else 41c6964679 Merge pull request 'development' (#43) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 25s
Reviewed-on: #43
2025-05-26 23:05:11 +00:00
luke-else f25c6ddd68 Merge pull request 'FEAT: #36 Added in Collapsible.svelte re-usable component.' (#42) from feature/collapsible-elements into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m19s
Reviewed-on: #42
2025-05-26 23:03:13 +00:00
luke-else 9b49710556 FEAT: #36 Added in Collapsible.svelte re-usable component. 2025-05-27 00:01:54 +01:00
luke-else a0c3b27aab Merge pull request 'HOTFIX: Corrected Contact form card' (#41) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 26s
Reviewed-on: #41
2025-05-26 20:14:48 +00:00
luke-else 005dfb6929 HOTFIX: Corrected Contact form card
Build and Push Development Docker Image / build-and-push (push) Successful in 1m20s
2025-05-26 21:12:32 +01:00
luke-else b96c6d2caf Merge pull request 'development' (#40) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #40
2025-05-24 21:45:00 +00:00
luke-else ef37e45281 Merge pull request 'chore/tailwind-conversion' (#38) from chore/tailwind-conversion into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m21s
Reviewed-on: #38
2025-05-24 21:36:15 +00:00
luke-else b55538345f Merge branch 'chore/tailwind-conversion' of ssh://git.luke-else.co.uk:222/luke-else/luke-else.co.uk into chore/tailwind-conversion 2025-05-24 22:34:10 +01:00
luke-else b586385d6d Merge pull request 'CHORE: Fixed loading icon and added it into REPOS page.' (#37) from chore/tailwind-conversion into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m24s
Reviewed-on: #37
2025-05-24 13:07:55 +00:00
luke-else 2d3046da48 CHORE: Fixed loading icon and added it into REPOS page. 2025-05-24 14:02:52 +01:00
luke-else 67f9844534 CHORE: Updated Gallery to use grid. Made card component mode modular. Added colour to the skills section of the page. 2025-05-24 11:46:33 +01:00
luke-else 50b8845e6c Merge pull request 'development' (#33) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #33
2025-05-23 21:37:35 +00:00
luke-else 79f6e8e90b Merge pull request 'chore/tailwind-conversion' (#32) from chore/tailwind-conversion into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m36s
Reviewed-on: #32
2025-05-23 21:35:36 +00:00
luke-else 25f3db52ec CHORE: Cleaning up code before merge 2025-05-23 22:32:58 +01:00
luke-else a46ac458dc FEAT: Added in git repos page 2025-05-23 22:26:42 +01:00
luke-else 206c5665a2 FEAT: Added contact page 2025-05-23 20:41:32 +01:00
luke-else fd3c620cb9 FEAT: Added in timeline element 2025-05-23 20:10:37 +01:00
luke-else c52d185f76 FEAT: Started fleshing out content on the webpage 2025-05-23 18:13:58 +01:00
luke-else 538d9593c2 Made components more re-usable. Added section component 2025-05-23 16:04:35 +01:00
luke-else 24a7ebf02a CHORE: Starting to get to work with changing some of the old formatting over to tailwind config 2025-05-21 22:45:18 +01:00
luke-else fc642a4ecd Imported tailwind libraries, started to re-write main page 2025-05-12 00:43:28 +01:00
luke-else d9e8b4b56c Updated packages and fixed warnings pertaining to exported types
Build and Push Development Docker Image / build-and-push (push) Successful in 1m34s
2025-05-11 23:50:26 +01:00
luke-else bd689bdb44 Merge pull request 'development' (#27) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 28s
Reviewed-on: #27
2025-04-27 21:21:09 +00:00
luke-else 051cd42fdb CHORE: Cleaning up codebase
Build and Push Development Docker Image / build-and-push (push) Successful in 1m5s
Moved component content to be above inline style blocks
2025-04-27 22:02:33 +01:00
luke-else da5f47a841 #26 Re-Made contact form. More work required.]
Build and Push Development Docker Image / build-and-push (push) Successful in 1m24s
2025-04-27 19:33:46 +01:00
luke-else 5fe7b83c47 #26 Updated key to support v2 of captcha
Build and Push Development Docker Image / build-and-push (push) Successful in 1m2s
2025-04-06 23:12:27 +01:00
luke-else 931e4d2abe Merge branch 'development' of ssh://git.luke-else.co.uk:222/luke-else/luke-else.co.uk into development
Build and Push Development Docker Image / build-and-push (push) Successful in 1m25s
2025-04-06 23:00:53 +01:00
luke-else 33ddd2add0 #26 Added re-captcha to the site 2025-04-06 23:00:42 +01:00
luke-else 8cd763b9d0 Merge pull request 'development' (#25) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 29s
Reviewed-on: #25
2025-03-12 15:15:39 +00:00
luke-else ce38e88885 #10 Added sliding card element for image stored in /assets/images/main.png
Build and Push Development Docker Image / build-and-push (push) Successful in 1m4s
2025-03-12 15:05:00 +00:00
luke-else e1160b3462 #23 Updated the colour of the rotating loading button
Build and Push Development Docker Image / build-and-push (push) Successful in 1m4s
2025-03-07 22:18:07 +00:00
luke-else 7042b2d500 Merge pull request 'development' (#24) from development into main
Build and Push Latest Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #24
2025-03-07 22:10:07 +00:00
luke-else 5f1a1d4959 #23 Updated the colour of the send button
Build and Push Development Docker Image / build-and-push (push) Successful in 1m6s
2025-03-07 21:58:40 +00:00
luke-else da2f2bc380 #4 Added new vscode colour scheme option.
Build and Push Development Docker Image / build-and-push (push) Successful in 1m3s
2025-03-06 16:00:35 +00:00
luke-else c3055a6882 Added a series of nicely curated themes
Build and Push Development Docker Image / build-and-push (push) Successful in 1m4s
2025-03-06 15:58:14 +00:00
luke-else 3557a6a6ad Added a nice new light pastel blue theme
Build and Push Development Docker Image / build-and-push (push) Successful in 1m4s
2025-03-06 15:41:06 +00:00
luke-else f34761d094 Updated pipeline to create a development build
Build and Push Development Docker Image / build-and-push (push) Successful in 1m8s
2025-03-06 14:45:39 +00:00
luke-else f7e3acf384 #4 Changed light colour theme in favour of a cold blue theme 2025-03-06 14:24:24 +00:00
luke-else ccbaa41cab Merge pull request 'Merge Ackee Tracker Changes' (#22) from development into main
Build and Push Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #22
2025-03-05 21:11:56 +00:00
luke-else f33456bae3 Merge pull request '#20 Removed ignore own visits as this is the default. Added in detailed tracking for the site.' (#21) from chore/ackee-tracker-enhance into development
Build and Push Docker Image / build-and-push (pull_request) Successful in 1m36s
Reviewed-on: #21
2025-03-05 21:11:09 +00:00
luke-else 4cab417bdd #20 Removed ignore own visits as this is the default. Added in detailed tracking for the site. 2025-03-05 21:09:51 +00:00
luke-else cb1304aaeb Merge pull request 'Added Loading Spinner' (#19) from development into main
Build and Push Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #19
2025-02-15 14:48:54 +00:00
luke-else 27488fe860 Added Loading Spinner
Build and Push Docker Image / build-and-push (pull_request) Successful in 1m24s
2025-02-15 14:47:59 +00:00
luke-else b9c4ec540a Merge pull request 'development' (#18) from development into main
Build and Push Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #18
2025-02-09 20:06:19 +00:00
luke-else c3f0be36a3 Merge pull request 'feature/repos' (#17) from feature/repos into development
Build and Push Docker Image / build-and-push (pull_request) Successful in 1m4s
Reviewed-on: #17
2025-02-09 20:05:36 +00:00
luke-else 71dc20c0ca #5 Styled cards, changed content in me.json 2025-02-09 20:03:48 +00:00
luke-else 9da13b76d3 #5 Repos are now displayed on the webpage - Additional stlying required. 2025-02-09 17:35:54 +00:00
luke-else 712d7857db #5 Started on creating page to handle API requests to https://git.luke-else.co.uk 2025-02-06 10:55:26 +00:00
luke-else 8ab101727e Removed unwanted action
Build and Push Docker Image / build-and-push (push) Successful in 1m6s
2025-02-06 09:44:51 +00:00
luke-else 5fb67af755 Merge pull request '#7 Updated readme and added photos to the repo.' (#15) from development into main
Build and Push Docker Image / build-and-push (push) Successful in 1m4s
Reviewed-on: #15
2025-02-06 09:39:24 +00:00
luke-else 15f30c09b1 #13 Reduced file size of profile image.
Build and Push Docker Image / build-and-push (push) Successful in 1m5s
2025-02-06 09:34:42 +00:00
luke-else e5c4243a1f #14 Changed font-size of contact page textarea
Build and Push Docker Image / build-and-push (push) Successful in 1m11s
2025-02-06 09:24:19 +00:00
luke-else 47a43f2b0e #7 Updated readme and added photos to the repo.
Build and Push Docker Image / build-and-push (pull_request) Successful in 1m3s
2025-02-05 15:03:09 +00:00
luke-else 1a6c5194e5 Merge pull request 'Merge Development into main.' (#8) from development into main
Build and Push Docker Image / build-and-push (push) Successful in 27s
Reviewed-on: #8
2025-02-05 14:31:22 +00:00
luke-else aaab8f2c98 Added Sliding Card which has content slide over the top of the main information
Build and Push Docker Image / build-and-push (pull_request) Successful in 1m21s
2025-02-05 14:23:22 +00:00
luke-else 2170344c9b #6 Updated profile picture 2025-02-05 11:08:15 +00:00
luke-else 45208d0ff9 Merge branch 'main' into development 2025-02-05 11:01:54 +00:00
luke-else 099bf34c19 Updated Colour theme, reduced skills content
Build and Push Docker Image / build-and-push (push) Successful in 1m5s
2025-02-03 13:49:21 +00:00
luke-else 93ca58f487 Added option to ignore own visits to ackee
Build and Push Docker Image / build-and-push (push) Successful in 1m6s
2025-02-03 11:06:32 +00:00
luke-else 1087f95bc4 Corrected invalid JS code
Build and Push Docker Image / build-and-push (push) Successful in 1m5s
2025-02-03 10:11:47 +00:00
luke-else 94b1e80358 Moved tracking script to correct location
Build and Push Docker Image / build-and-push (push) Successful in 1m5s
2025-02-03 09:57:16 +00:00
luke-else 753e091a85 Added tracking to the site
Build and Push Docker Image / build-and-push (push) Failing after 41s
2025-02-03 09:51:26 +00:00
luke-else b5f6b3adf8 Added registry to build command
Build and Push Docker Image / build-and-push (push) Successful in 1m16s
2025-02-01 13:15:36 +00:00
luke-else 7cefc86f08 Added container registry to push command
Build and Push Docker Image / build-and-push (push) Failing after 58s
2025-02-01 13:11:50 +00:00
luke-else dfd47c0d98 Corrected names in build and push commands
Build and Push Docker Image / build-and-push (push) Failing after 1m0s
2025-02-01 13:10:02 +00:00
luke-else e4da310ef2 Removed registry from build command
Build and Push Docker Image / build-and-push (push) Has been cancelled
2025-02-01 13:08:46 +00:00
luke-else 196e338e66 Added container registry and username to push and build commands
Build and Push Docker Image / build-and-push (push) Failing after 26s
2025-02-01 13:06:39 +00:00
luke-else 8ccc8e2129 Specify container registry
Build and Push Docker Image / build-and-push (push) Failing after 1m17s
2025-02-01 13:02:59 +00:00
luke-else 83361c4199 Updated name of workflows file
Build and Push Docker Image / build-and-push (push) Has been cancelled
2025-02-01 13:01:21 +00:00
luke-else 1eab47ee41 Created workflow to publish dockerfile 2025-02-01 13:00:02 +00:00
luke-else 9938e304c7 Increased font-weight to make links more readable 2025-02-01 13:00:02 +00:00
luke-else d6716f4f4b Adapted feedback regarding initial messages not showing for long enough. 2025-02-01 13:00:02 +00:00
luke-else 6499044081 Changed min width before content starts dissapearing on smalled devices 2025-02-01 13:00:02 +00:00
luke-else fdae605dcb Updated dependencies to resolve vulnerability 2025-02-01 13:00:02 +00:00
luke-else 05ccfc0997 Added ability to switch between light and dark mode 2025-02-01 13:00:02 +00:00
luke-else 7a932eed95 Added pulsing effect to timeline elements that are still in progress 2025-02-01 13:00:02 +00:00
luke-else be1bd54fb9 Adapted themings to allow for light and dark 2025-02-01 13:00:02 +00:00
luke-else 3c900a9aef Re-ordered experience in json file 2025-02-01 13:00:02 +00:00
luke-else 6dc67adf9f Updated timeline data colouring to add contrast 2025-02-01 13:00:02 +00:00
luke-else dd03919de3 Added author and descriptiom to webpage 2025-02-01 13:00:02 +00:00
luke-else 3738f0d215 Added meta description tag to website 2025-02-01 13:00:02 +00:00
luke-else f8020a19a2 CHORE: Cleaned up components to make main.svelte easier to maintain. 2025-02-01 13:00:02 +00:00
luke-else 083fbe1c20 Added timeline component to website 2025-02-01 13:00:02 +00:00
luke-else dad56090ac Added actual content to be displayed on cards. May need corrections to be made. 2025-02-01 13:00:02 +00:00
luke-else 05474689be #1 Added 'X' to popup cards, adjusted skills container and added heading 2025-02-01 13:00:02 +00:00
luke-else 97502acbff Updated flex basis on card to make sure that card don't end up super thin 2025-02-01 13:00:02 +00:00
luke-else 93fde2410b Completed contact form and improved styling on cards 2025-02-01 13:00:02 +00:00
luke-else 8a8ecc14f3 Created basis for contact page and updated CV 2025-02-01 13:00:02 +00:00
luke-else 823ff4cb33 Moved cards out into seperate component to enable re-usability 2025-02-01 13:00:02 +00:00
luke-else 75dd8090bb External links now open in a new window. 2025-02-01 13:00:02 +00:00
luke-else e567027ec6 Updated Favicon 2025-02-01 13:00:02 +00:00
luke-else adf372f533 Updated docker file to use production environment instead of dev 2025-02-01 13:00:02 +00:00
luke-else e9ca6a2697 Created dockerfile 2025-02-01 13:00:02 +00:00
luke-else e457d909cd Created base template for contact and repo pages.
Fixed styling issues on toasts on small screens.
2025-02-01 13:00:02 +00:00
luke-else 88da650bba Updated content, created modal and changed skills card to style nicer on smaller screens 2025-02-01 13:00:02 +00:00
luke-else 6c0b2c2f67 Removed mastery data, don't think it is a necessary item to include 2025-02-01 13:00:02 +00:00
luke-else e6c45567f2 Created skill cards 2025-02-01 13:00:02 +00:00
luke-else abe1ea2055 Moved Toast logic into own directory 2025-02-01 13:00:02 +00:00
luke-else cd4bcd544f Fixed toasts not working. 2025-02-01 13:00:02 +00:00
luke-else 9158ca1608 Uploading toast code... incomplete 2025-02-01 13:00:02 +00:00
luke-else e6c7d3a0f6 Updated personal content and prepared async fetch to be more expandable and include more content rather than a single div. 2025-02-01 13:00:02 +00:00
luke-else 864152ca9a Made more reactive styling on main page and template 2025-02-01 13:00:02 +00:00
luke-else dcc6aa000a Created JS function to fetch static JSON. Now loads data Asynchronously :) 2025-02-01 13:00:02 +00:00
luke-else 4ef0573b55 Added addional styling to smaller devices to reduce the padding of main content paragraphs 2025-02-01 13:00:02 +00:00
luke-else 5e229ec264 Created underline on heading element 2025-02-01 13:00:02 +00:00
luke-else bb14189833 Added json content display and updated styling on main card item. 2025-02-01 13:00:02 +00:00
luke-else 94cc74bcdb Created new main card and created a container for inner element of main page. 2025-02-01 13:00:02 +00:00
luke-else 0a647357b5 Created Navbar and added styling to links 2025-02-01 13:00:02 +00:00
luke-else aebdce25d2 Created SvelteKit Application as Base 2025-02-01 13:00:02 +00:00
luke-else 7d00e51c6b Updated line numbers on flip card 2025-02-01 13:00:02 +00:00
luke-else b2f0a2e6b0 Updated flip card to use rust syntax 2025-02-01 13:00:02 +00:00
luke-else 1173388600 Corrected Typo in metadata 2025-02-01 13:00:02 +00:00
luke-else 8207831f78 Added metadata to flipcard site 2025-02-01 13:00:02 +00:00
luke-else a237297383 Updated flipcard content 2025-02-01 13:00:02 +00:00
luke-else cd9676eaf3 Added age.js to allow for automatic age update 2025-02-01 13:00:02 +00:00
luke-else 84e67fb35a Updated main page to follow C# syntax 2025-02-01 13:00:02 +00:00
luke-else a9387cf84c Added CV to assets for later reference 2025-02-01 13:00:02 +00:00
luke-else 24659bc269 Allow card to flip both ways 2025-02-01 13:00:02 +00:00
luke-else 68496c1677 Tap to flip card - hopefully 2025-02-01 13:00:02 +00:00
luke-else 8c82d99b6c Added Mobile Hover to card 2025-02-01 13:00:02 +00:00
luke-else 2a98cce593 Created Business Card Site 2025-02-01 13:00:02 +00:00
luke-else d729c3fcfb Removed unecessary files 2025-02-01 12:57:42 +00:00
luke-else 112e0f1a5c Created workflow to publish dockerfile 2025-02-01 12:54:06 +00:00
luke-else e843870afd Increased font-weight to make links more readable 2023-10-27 09:51:31 +01:00
luke-else 74dc1196cd Adapted feedback regarding initial messages not showing for long enough. 2023-10-27 09:25:00 +01:00
luke-else 306396cce1 Changed min width before content starts dissapearing on smalled devices 2023-10-26 22:02:42 +01:00
luke-else a2acc03f7c Updated dependencies to resolve vulnerability 2023-10-26 21:49:13 +01:00
luke-else 6f0f5f1cf7 Added ability to switch between light and dark mode 2023-10-26 21:41:18 +01:00
luke-else 278fc640ce Added pulsing effect to timeline elements that are still in progress 2023-10-26 13:19:46 +01:00
luke-else 2e07de0e71 Adapted themings to allow for light and dark 2023-10-26 10:24:30 +01:00
luke-else e0ea53a9d3 Re-ordered experience in json file 2023-10-25 14:18:37 +01:00
luke-else 632eed6810 Updated timeline data colouring to add contrast 2023-10-25 13:51:18 +01:00
luke-else dd4dfdea78 Added author and descriptiom to webpage 2023-10-25 13:04:38 +01:00
luke-else 377f87ced3 Added meta description tag to website 2023-10-25 11:54:16 +01:00
luke-else d8d40ddc30 CHORE: Cleaned up components to make main.svelte easier to maintain. 2023-10-25 11:28:22 +01:00
luke-else ee2098e6e6 Added timeline component to website 2023-10-25 10:54:39 +01:00
luke-else d2066087ae Added actual content to be displayed on cards. May need corrections to be made. 2023-10-13 14:38:04 +01:00
luke-else d187ec70c3 #1 Added 'X' to popup cards, adjusted skills container and added heading 2023-10-04 22:07:53 +01:00
luke-else 4a734b66f9 Updated flex basis on card to make sure that card don't end up super thin 2023-10-04 21:01:40 +01:00
luke-else cbdc81c4ce Completed contact form and improved styling on cards 2023-09-29 14:41:37 +01:00
luke-else 7bd03be127 Created basis for contact page and updated CV 2023-09-28 21:30:41 +01:00
luke-else 8d5319ac4a Moved cards out into seperate component to enable re-usability 2023-09-28 19:22:52 +01:00
luke-else 26357e531d External links now open in a new window. 2023-09-28 07:15:13 +01:00
luke-else eac1534497 Updated Favicon 2023-09-27 20:11:16 +01:00
luke-else 94de27084c Updated docker file to use production environment instead of dev 2023-09-27 19:25:07 +01:00
luke-else 0a6ede8125 Created dockerfile 2023-09-26 23:26:35 +01:00
luke-else ebf9a21478 Created base template for contact and repo pages.
Fixed styling issues on toasts on small screens.
2023-09-26 23:15:42 +01:00
luke-else a6508e284e Updated website to be more applicable. Removed the contact page which lost functionality. 2023-05-18 20:53:15 +01:00
49 changed files with 2770 additions and 2650 deletions
Submodule
+1
Submodule .devcontainer added at 9ac55120cb
+19
View File
@@ -0,0 +1,19 @@
# .dockerignore
.vscode
node_modules
.git
.gitattributes
.gitea
.eslintignore
.eslintrc.cjs
.prettierrc
.pretieriignore
README.md
Dockerfile
+30
View File
@@ -0,0 +1,30 @@
name: Build and Push Development Docker Image
on:
push:
branches: [ development ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ secrets.CONTAINER_REGISTRY }}
username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
password: ${{ secrets.CONTAINER_REGISTRY_PASSKEY }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Tag Docker Image
run: |
docker build -t ${{ secrets.CONTAINER_REGISTRY }}/${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:dev .
- name: Push Docker Image
run: |
docker push ${{ secrets.CONTAINER_REGISTRY }}/${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:dev
+30
View File
@@ -0,0 +1,30 @@
name: Build and Push Latest Docker Image
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ secrets.CONTAINER_REGISTRY }}
username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
password: ${{ secrets.CONTAINER_REGISTRY_PASSKEY }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Tag Docker Image
run: |
docker build -t ${{ secrets.CONTAINER_REGISTRY }}/${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:latest .
- name: Push Docker Image
run: |
docker push ${{ secrets.CONTAINER_REGISTRY }}/${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:latest
+12 -10
View File
@@ -1,10 +1,12 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.DS_Store
node_modules
.pnpm-store
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
.vscode
+4
View File
@@ -0,0 +1,4 @@
[submodule ".devcontainer"]
path = .devcontainer
url = ssh://git@git.luke-else.co.uk:222/luke-else/.devcontainer
branch = svelte
+4 -2
View File
@@ -1,2 +1,4 @@
engine-strict=true
resolution-mode=highest
engine-strict=true
resolution-mode=highest
@luke-else:registry=https://git.luke-else.co.uk/api/packages/luke-else/npm/
+13 -13
View File
@@ -1,13 +1,13 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
+10 -9
View File
@@ -1,9 +1,10 @@
{
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
{
"useTabs": false,
"tabWidth": 4,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}
+56 -38
View File
@@ -1,38 +1,56 @@
# create-svelte
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```bash
# create a new project in the current directory
npm create svelte@latest
# create a new project in my-app
npm create svelte@latest my-app
```
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```bash
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of your app:
```bash
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
## Welcome
This site contains information relating to my personal situation, however, you are able to clone this project and change the `me.json` file to update this as required.
## Screenshots
<p align="center">
<img src="assets/images/main.png" width="40%">
<img src="assets/images/light_mode.png" width="40%">
</p>
<p align="center">
<img src="assets/images/skills.png" width="30%">
<img src="assets/images/repos.png" width="30%">
<img src="assets/images/contact.png" width="30%">
</p>
<p align="center">
<img src="assets/images/experience.png" width="30%">
</p>
## Getting Started
Get starting but installing all of the dependencies of the project.
```bash
npm install
```
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```bash
npm run dev
```
```bash
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of the app:
```bash
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. In this case, vite is used.
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

+21
View File
@@ -0,0 +1,21 @@
FROM git.luke-else.co.uk/luke-else/nodejs:latest AS build
WORKDIR /app
COPY package*.json ./
RUN rm -rf node_modules
RUN rm -rf build
COPY . .
RUN pnpm install
RUN pnpm run build
FROM git.luke-else.co.uk/luke-else/nodejs:latest AS run
WORKDIR /app
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/.npmrc ./.npmrc
COPY --from=build /app/build ./build
RUN pnpm install --prod
EXPOSE 3000
ENTRYPOINT [ "pnpm", "run", "start" ]
-1845
View File
File diff suppressed because it is too large Load Diff
+20 -11
View File
@@ -5,6 +5,7 @@
"scripts": {
"dev": "vite dev",
"build": "vite build",
"start": "export PORT=3000 && node ./build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
@@ -12,16 +13,24 @@
"format": "prettier --plugin-search-dir . --write ."
},
"devDependencies": {
"@rollup/plugin-json": "^6.0.0",
"@sveltejs/adapter-auto": "^2.0.0",
"@sveltejs/kit": "^1.20.4",
"prettier": "^2.8.0",
"prettier-plugin-svelte": "^2.10.1",
"svelte": "^4.0.5",
"svelte-check": "^3.4.3",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"vite": "^4.4.2"
"@rollup/plugin-json": "^6.1.0",
"@sveltejs/adapter-auto": "6.0.0",
"@sveltejs/adapter-node": "5.2.12",
"@sveltejs/kit": "2.20.8",
"@sveltejs/vite-plugin-svelte": "^5.1.1",
"prettier": "3.5.3",
"prettier-plugin-svelte": "3.3.3",
"svelte": "5.28.2",
"svelte-check": "4.1.7",
"tslib": "2.8.1",
"typescript": "5.8.3",
"vite": "6.3.5"
},
"type": "module"
"type": "module",
"dependencies": {
"@luke-else/component-lib": "^1.1.5",
"@tailwindcss/vite": "^4.1.13",
"svelte-toasts": "^1.1.2",
"tailwindcss": "^4.1.13"
}
}
+1934
View File
File diff suppressed because it is too large Load Diff
-69
View File
@@ -1,69 +0,0 @@
<script lang="ts">
export let showModal: boolean;
let dialog: HTMLDialogElement;
$: if (dialog && showModal) dialog.showModal();
</script>
<!-- svelte-ignore a11y-click-events-have-key-events a11y-no-noninteractive-element-interactions -->
<dialog
bind:this={dialog}
on:close={() => (showModal = false)}
on:click|self={() => dialog.close()}
>
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div on:click|stopPropagation>
<slot name="header" />
<hr />
<slot />
<hr />
<!-- svelte-ignore a11y-autofocus -->
<button autofocus on:click={() => dialog.close()}>Close</button>
</div>
</dialog>
<style>
dialog {
max-width: 70%;
border-radius: 0.2em;
border: none;
padding: 0em 2em 2em 2em;
border-left: 2em;
border-right: 2em;
background: var(--bg);
color: var(--fg);
box-shadow: .5em .5em .5em var(--red);
}
dialog::backdrop {
background: rgba(0, 0, 0, 0.3);
}
dialog > div {
padding: 1em;
}
dialog[open] {
animation: zoom 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes zoom {
from {
transform: scale(0.95);
}
to {
transform: scale(1);
}
}
dialog[open]::backdrop {
animation: fade 0.5s ease-out;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
button {
display: block;
}
</style>
-18
View File
@@ -1,18 +0,0 @@
<script>
export let width = "1em"
</script>
<svg
width={width}
style="text-align: center; display: inline-block;"
aria-hidden="true"
focusable="false"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 352 512"
>
<path
fill="currentColor"
d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"
/>
</svg>
-19
View File
@@ -1,19 +0,0 @@
<script>
export let width = "1em"
</script>
<svg
width={width}
style="text-align: center; display: inline-block;"
aria-hidden="true"
focusable="false"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="currentColor"
d="M256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm-11.49 120h22.979c6.823 0 12.274 5.682 11.99 12.5l-7 168c-.268 6.428-5.556 11.5-11.99 11.5h-8.979c-6.433 0-11.722-5.073-11.99-11.5l-7-168c-.283-6.818 5.167-12.5 11.99-12.5zM256 340c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28z"
class=""
></path>
</svg>
-18
View File
@@ -1,18 +0,0 @@
<script>
export let width = "1em"
</script>
<svg
width={width}
style="text-align: center; display: inline-block;"
aria-hidden="true"
focusable="false"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="currentColor"
d="M256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm-36 344h12V232h-12c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h48c6.627 0 12 5.373 12 12v140h12c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12h-72c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12zm36-240c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"
/>
</svg>
-18
View File
@@ -1,18 +0,0 @@
<script>
export let width = "1em"
</script>
<svg
width={width}
style="text-align: center; display: inline-block;"
aria-hidden="true"
focusable="false"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="currentColor"
d="M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 464c-118.664 0-216-96.055-216-216 0-118.663 96.055-216 216-216 118.664 0 216 96.055 216 216 0 118.663-96.055 216-216 216zm141.63-274.961L217.15 376.071c-4.705 4.667-12.303 4.637-16.97-.068l-85.878-86.572c-4.667-4.705-4.637-12.303.068-16.97l8.52-8.451c4.705-4.667 12.303-4.637 16.97.068l68.976 69.533 163.441-162.13c4.705-4.667 12.303-4.637 16.97.068l8.451 8.52c4.668 4.705 4.637 12.303-.068 16.97z"
/>
</svg>
-66
View File
@@ -1,66 +0,0 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import { fade } from "svelte/transition";
import { Toast, ToastType } from "$lib/toast";
import SuccessIcon from "./SuccessIcon.svelte";
import ErrorIcon from "./ErrorIcon.svelte";
import InfoIcon from "./InfoIcon.svelte";
import CloseIcon from "./CloseIcon.svelte";
const dispatch = createEventDispatcher();
export let toastData: Toast;
</script>
<article class={toastData.type.toString().toLowerCase()} role="alert" transition:fade>
{#if toastData.type === ToastType.Success}
<SuccessIcon width="1.1em" />
{:else if toastData.type === ToastType.Error}
<ErrorIcon width="1.1em" />
{:else}
<InfoIcon width="1.1em" />
{/if}
<div class="text">
{toastData.text}
</div>
{#if toastData.dismissable}
<button class="close" on:click={() => dispatch("dismiss")}>
<CloseIcon width="0.8em" />
</button>
{/if}
</article>
<style lang="postcss">
article {
color: white;
padding: 0.75rem 1.5rem;
border-radius: 0.2rem;
display: flex;
align-items: center;
margin: 0 auto 0.5rem auto;
width: 20rem;
}
.error {
background: IndianRed;
}
.success {
background: MediumSeaGreen;
}
.info {
background: SkyBlue;
}
.text {
margin-left: 1rem;
}
button {
color: white;
background: transparent;
border: 0 none;
padding: 0;
margin: 0 0 0 auto;
line-height: 1;
font-size: 1rem;
}
</style>
-28
View File
@@ -1,28 +0,0 @@
<script lang="ts">
import Toast from "./Toast.svelte";
import { dismissToast, toasts } from "$lib/store";
</script>
{#if $toasts}
<section>
{#each $toasts as toast (toast.id)}
<Toast toastData = {toast} on:dismiss={() => dismissToast(toast.id)} />
{/each}
</section>
{/if}
<style lang="postcss">
section {
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: 100%;
display: flex;
margin-top: 1rem;
justify-content: center;
flex-direction: column;
z-index: 10;
}
</style>
+1
View File
@@ -0,0 +1 @@
@import "tailwindcss";
+12 -12
View File
@@ -1,12 +1,12 @@
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface Platform {}
}
}
export {};
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface Platform {}
}
}
export {};
+31 -97
View File
@@ -1,97 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@v2.15.1/devicon.min.css">
<meta name="viewport" content="width=device-width" />
<meta name="color-scheme" content="dark" />
%sveltekit.head%
<style>
:root {
--bg: #282c34;
--bg-grad: #5a606d9f;
--bg-2: #4f5157;
--fg: #ABB2BF;
--red: #E06C75;
--green: #98C379;
--yellow: #E5C07B;
--blue: #61AFEF;
--purple: #C678DD;
--cyan: #56B6C2;
--font: Consolas, 'Cascadia Code', Monaco, 'SF Mono', 'DejaVu Sans Mono', 'Roboto Mono';
background: var(--bg);
color: var(--fg);
font-family: var(--font);
font-size: 110%;
margin: 2rem;
}
h1, h2, h3 {
color: var(--red);
}
hr {
border: .2em solid var(--bg-grad);
border-radius: 5em;
}
*::-webkit-scrollbar,
*::-webkit-scrollbar-thumb {
width: 26px;
border-radius: 13px;
background-clip: padding-box;
border: 10px solid transparent;
color: var(--fg);
}
*::-webkit-scrollbar-thumb:hover{
color: var(--green);
}
*::-webkit-scrollbar-thumb {
box-shadow: inset 0 0 0 10px;
}
@media (max-width: 800px) {
.not-required {
display: none;
}
}
a {
text-decoration: none;
position: relative;
color: var(--green);
}
a:after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0%;
border-bottom: 2px solid var(--fg);
transition: 0.4s;
}
a:hover:after {
width: 100%;
color: var(--purple);
}
a:hover {
color: var(--purple);
}
a:active {
color: var(--red);
}
</style>
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="description"
content="Luke Else - Software Developer at Thales UK. I specialise in developing distributed systems in C++ using highly scalable internal frameworks. I also develop backend and system applications in my spare time using both Svelte, Rust and C++. Feel free to check my work out at https://git.luke-else.co.uk."
/>
<meta name="author" content="Luke Else (mail@luke-else.co.uk)" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/devicons/devicon@v2.15.1/devicon.min.css"
/>
<meta name="viewport" content="width=device-width" />
<script
async
src="https://tracking.luke-else.co.uk/tracker.js"
data-ackee-server="https://tracking.luke-else.co.uk"
data-ackee-domain-id="6c59ab88-dc6d-4d53-9831-0d6bff919dcd"
data-ackee-opts='{ "detailed": true }'
></script>
%sveltekit.head%
<style></style>
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
+67
View File
@@ -0,0 +1,67 @@
import type { GitRepo } from "../types";
const API_BASE_URL = "https://git.luke-else.co.uk/api/v1";
export const IMAGE_URL_SUFFIX = "/raw/branch/main/assets/images/main.png";
export async function fetchRepos(): Promise<GitRepo[]> {
try {
console.log("Fetching repos...");
const response = await fetch(`${API_BASE_URL}/repos/search?sort=updated&order=desc&limit=12`, {
headers: {
// "Authorization": `token ${ACCESS_TOKEN}`,
"Content-Type": "application/json"
}
});
if (!response.ok) {
throw new Error(`Error: ${response.statusText}`);
}
const data: { data: GitRepo[] } = await response.json();
return data.data; // Extract the list of repositories
} catch (error) {
console.error("Failed to fetch repos:", error);
return [];
}
}
export function timeSince(inputDate: Date | string): string {
const date = new Date(inputDate); // Ensure it's a Date object
if (isNaN(date.getTime())) {
throw new Error("Invalid date provided");
}
const now: Date = new Date();
const diffInMs: number = now.getTime() - date.getTime();
const diffInSeconds: number = Math.floor(diffInMs / 1000);
const diffInMinutes: number = Math.floor(diffInSeconds / 60);
const diffInHours: number = Math.floor(diffInMinutes / 60);
const diffInDays: number = Math.floor(diffInHours / 24);
const diffInMonths: number = Math.floor(diffInDays / 30); // Approximate
const diffInYears: number = Math.floor(diffInDays / 365); // Approximate
if (diffInDays === 0) return "Today";
if (diffInDays === 1) return "Yesterday";
if (diffInDays < 7) return `${diffInDays} days ago`;
if (diffInDays < 30) return `${Math.floor(diffInDays / 7)} week${diffInDays >= 14 ? 's' : ''} ago`;
if (diffInMonths < 12) return `${diffInMonths} month${diffInMonths > 1 ? 's' : ''} ago`;
return `${diffInYears} year${diffInYears > 1 ? 's' : ''} ago`;
}
export async function checkImage(repo: GitRepo): Promise<boolean> {
try {
const URL = repo.html_url + IMAGE_URL_SUFFIX;
console.log("Checking image:", URL);
const response = await fetch(URL);
if (response.ok) {
console.log("Image found!");
return true;
} else {
console.log("Image not found!");
return false;
}
} catch (error) {
return false;
}
}
+4 -4
View File
@@ -1,5 +1,5 @@
export async function getJson(path: string) {
let response = await fetch(path);
let users = await response.json();
return users;
export async function getJson(path: string) {
let response = await fetch(path);
let users = await response.json();
return users;
}
+1 -1
View File
@@ -1 +1 @@
// place files you want to import through the `$lib` alias in this folder.
// place files you want to import through the `$lib` alias in this folder.
-28
View File
@@ -1,28 +0,0 @@
import { ToastType, type Toast } from "$lib/toast";
import { writable, type Writable } from "svelte/store";
export const toasts: Writable<Toast[]> = writable([]);
export const addToast = (toast: Toast) => {
// Create a unique ID so we can easily find/remove it
// if it is dismissible/has a timeout.
toast.id = Math.floor(Math.random() * 10000);
// Setup some sensible defaults for a toast.
const defaults = {
id: toast.id,
type: ToastType.Info,
dismissible: true,
timeout: 3000,
};
// Push the toast to the top of the list of toasts
toasts.update((all) => [{ ...defaults, ...toast }, ...all]);
// If toast is dismissible, dismiss it after "timeout" amount of time.
if (toast.timeout) setTimeout(() => dismissToast(toast.id), toast.timeout);
};
export const dismissToast = (id: number) => {
toasts.update((all) => all.filter((t) => t.id !== id));
};
+12
View File
@@ -0,0 +1,12 @@
import { writable } from "svelte/store";
import type { GitRepo } from "./types";
import { fetchRepos } from "./api/git";
////////////////////////////////////////
// Git Repo Stores
////////////////////////////////////////
export const repos = writable<GitRepo[]>([]);
export async function loadRepos() {
repos.set(await fetchRepos());
}
-26
View File
@@ -1,26 +0,0 @@
/**
* @enum Used to refer to the type of toast being displayed
*/
export enum ToastType {
Info = "info",
Success = "success",
Error = "error"
}
/**
* @class Toast Notification
*/
export class Toast {
constructor(text: String, type: ToastType, dismissable: boolean, timeout: number ) {
this.text = text;
this.type = type;
this.dismissable = dismissable;
this.timeout = timeout;
}
id: number = 0;
text: String;
type: ToastType;
dismissable: Boolean;
timeout: number;
}
+22
View File
@@ -0,0 +1,22 @@
export type TimelinePosition = 'right' | 'left' | 'alternate';
export type ParentPosition = 'right' | 'left';
export type TimelineConfig = {
rootPosition: TimelinePosition;
};
export interface GitRepo {
name: string;
description: string;
language: string;
size: number;
updated_at: Date;
html_url: string;
private: boolean;
fork: boolean;
owner: {
login: string;
avatar_url: string;
};
}
+86 -191
View File
@@ -1,191 +1,86 @@
<script lang="ts">
import { getJson } from "$lib/data";
import { Toast, ToastType } from "$lib/toast";
import { addToast } from "$lib/store";
import Modal from './Modal.svelte';
let showModal: boolean = false;
let activeModal: any = null;
</script>
<style>
.main-card {
background-color: var(--bg-grad);
border-radius: 1em;
padding: .2em 2em 2em 2em;
box-shadow: .5em .5em .5em var(--purple);
}
.flex-container {
display: flex;
align-items: center;
}
.profile {
border-radius: 100%;
height: 8em;
width: 8em;
padding: 1em 1em 1em 1em;
border: .5em solid var(--bg-grad);
}
.about {
padding: 0em 5% 0em 5%;
font-size: 125%;
}
@media (max-width: 800px) {
.flex-container {
align-items: center;
flex-direction: column;
padding: 0px;
}
.about {
font-size: 100%;
}
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0em;
}
.card-header h1 {
font-size: 2em;
}
.card-header h2 {
font-size: 1.5em;
}
.card-header h3 {
font-size: 1.5em;
}
.card-header .logo {
color: var(--fg);
font-size: 3em;
}
/* Skills Cards CSS */
.skills-container {
max-width: 90%;
padding: 0em 2em;
margin: em auto;
}
.cards {
display: flex;
flex-wrap: wrap;
flex-direction: row;
gap: 3em 3em;
justify-content: center;
padding: 3em 1em 2em 0em;
list-style: none;
transition: all 0.2s;
}
.card {
display: flex;
flex-direction: column;
flex-wrap: wrap;
flex: 2 1 20%;
min-width: 10em;
padding: .5em 2.5em 2em 2.5em;
background: var(--bg-grad);
border-radius: .5em;
scroll-snap-align: start;
transition: all 0.2s;
}
.card:hover {
box-shadow: .5em .5em .5em var(--cyan);
}
.card .card-content {
margin: 2em 0em;
max-width: 85%;
}
.card-footer {
display: flex;
gap: 1.5em;
justify-content: space-between;
margin-top: auto;
}
</style>
{#await getJson('/json/me.json')}
<div class="card">
<div class="card-header">
<h1>Loading...</h1>
</div>
</div>
{:then info}
<div class="main-card">
<div class="card-header">
<h1>{info.name}</h1>
<h3 class="not-required">{info.job_title}</h3>
</div>
<hr />
<div class="flex-container">
<img class="profile not-required" src={info.profile_photo} alt="{info.name}'s Profile Photo">
<p class="about">{@html info.about}</p>
</div>
</div>
<div class="skills-container">
<ul class="cards">
{#each info.skills as skill}
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
<li on:click={() => {showModal = true; activeModal = skill}} class="card">
<div>
<div class="card-header">
<h2>{skill.skill}</h2>
<i class="{skill.logo} logo"></i>
</div>
<hr />
<div class="card-content">
<p class="not-required">{skill.about}</p>
</div>
</div>
<div class="card-footer">
<a href="/contact">View More</a>
<a href="/repos">Repos</a>
</div>
</li>
{/each}
</ul>
</div>
{:catch}
<div class="card">
<div class="card-header">
<h1>Unable to load portfolio overview data</h1>
</div>
</div>
<div style="display: none;">{addToast(new Toast("Unable to load me.json", ToastType.Error, true, 3000))}</div>
{/await}
{#if activeModal != null}
<Modal bind:showModal>
<h2 slot="header" class="card-header">
{activeModal.skill}
<i class="{activeModal.logo} logo"></i>
</h2>
<p>
{activeModal.about}
</p>
<div class="card-footer">
<a href="{activeModal.link}">Learn More</a>
<a href="/repos">Repos</a>
</div>
</Modal>
{/if}
<script lang="ts">
import { getJson } from '$lib/data';
import { toasts } from 'svelte-toasts';
import {
Loading,
Section,
Card,
GridGallery,
SkillProgress,
Timeline,
Collapsible
} from '@luke-else/component-lib';
</script>
{#await getJson('/json/me.json')}
<Loading />
{:then info}
<div style="display: none;">
{toasts.add({
title: 'Welcome',
duration: 5000,
type: 'success',
placement: 'bottom-center',
showProgress: true
})}
</div>
<!-- Main Card -->
<Section label="[About]">
<Card>
<h2 slot="headerLeft">{info.name}</h2>
<h2 slot="headerRight">{info.job_title}</h2>
<div slot="content" class="flex flex-row items-center gap-5">
<img
src={info.profile_photo}
alt="Avatar"
class="max-md:hidden rounded-full w-32 h-32 md:w-48 md:h-48 mt-2 mb-2 p-2 border-3"
/>
<p
class="[&>*]:underline [&>*]:decoration-2 [&>*]:decoration-transparent [&>*]:hover:decoration-inherit [&>*]:transition-all [&>*]:duration-300 [&>*]:text-green-600"
>
{@html info.about}
</p>
</div>
<h3 slot="footerLeft">{@html info.location}</h3>
</Card>
</Section>
<!-- Skills -->
<Section label="[Skills]">
<GridGallery>
{#each info.skills as skill}
<Card
containerStyle="opacity-100 hover:opacity-100 hover:scale-[105%] md:opacity-70 transition-all duration-300"
>
<h2 slot="headerLeft">{skill.name}</h2>
<i slot="headerRight" class="text-slate-300 text-5xl {skill.logo}"></i>
<div slot="content">
<Collapsible>
<span slot="label" class="text-lg">About {skill.name}</span>
<span slot="content">{skill.about}</span>
</Collapsible>
<SkillProgress skillColour={skill.colour} value={skill.competency} />
</div>
<h3 slot="footerLeft"><a href={skill.link} target="_blank">{skill.link}</a></h3>
</Card>
{/each}
</GridGallery>
</Section>
<!-- Experience -->
<Section label="[Experience]">
<Timeline timelineData={info.timeline} />
</Section>
{:catch}
<div style="display: none;">
{toasts.add({
title: 'Error',
description: 'There was an error loading static site data',
duration: 0,
placement: 'bottom-center',
showProgress: true
})}
</div>
{/await}
+28 -56
View File
@@ -1,56 +1,28 @@
<script>
import Toasts from "../Toasts/Toasts.svelte";
</script>
<style>
.main-container {
margin-left: 10%;
margin-right: 10%;
padding-top: 2em;
}
@media (max-width: 800px) {
.main-container {
margin: 0em;
padding-top: 1em;
}
}
nav {
position: relative;
overflow:visible;
display: flex;
justify-content: center;
gap: 1.5em;
padding: 0em 0em 1.5em 0em;
z-index: 2;
height: 1.5em;
border-radius: 4px;
}
.fade {
-webkit-animation: fadeinout 1s linear forwards;
animation: fadeinout 1s linear forwards;
}
@-webkit-keyframes fadeinout {
0% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes fadeinout {
0% { opacity: 0; }
100% { opacity: 1; }
}
</style>
<nav>
<a href = "/">//Profile</a>
<a href = "/repos">//Repos</a>
<a href = "/contact">//Contact</a>
</nav>
<div class="main-container fade">
<Toasts></Toasts>
<slot />
</div>
<script lang="ts">
import '../app.css';
import { ToastContainer, FlatToast } from 'svelte-toasts';
import { PageIcon } from '@luke-else/component-lib';
</script>
<div
class="min-h-screen px-8 py-4 bg-white text-slate-600 dark:bg-slate-900/90 dark:text-slate-200/60 md:text-2xl sm:text-md font-mono flex flex-col gap-5 transition duration-1000 ease-in-out"
>
<nav
class="w-full px-8 py-4 flex gap-10 text-xl justify-center items-center text-green-600 font-semibold"
>
<a href="/" class="hover:underline">//Profile</a>
<a href="/repos" class="hover:underline">//Repos</a>
<a href="/contact" class="hover:underline">//Contact</a>
</nav>
<a href="https://git.luke-else.co.uk" target="_blank">
<PageIcon iconClass="devicon-git-plain" />
</a>
<div class="container mx-auto justify-center items-center flex flex-col">
<slot />
<ToastContainer let:data>
<FlatToast {data} />
</ToastContainer>
</div>
</div>
+7 -5
View File
@@ -1,5 +1,7 @@
<script>
import Main from '../main.svelte';
</script>
<Main></Main>
<script>
import Main from '../main.svelte';
</script>
<div>
<Main></Main>
</div>
+103
View File
@@ -0,0 +1,103 @@
<script lang="ts">
import { toasts } from 'svelte-toasts';
import { Card, Section } from '@luke-else/component-lib';
import { page } from '$app/state';
const sent = page.url.searchParams.get('sent');
if (sent == 'true') {
toasts.add({
title: 'Message sent!',
description: 'Thank you for contacting me.',
type: 'success',
duration: 4000,
placement: 'bottom-center'
});
}
if (sent == 'false') {
toasts.add({
title: 'Message not sent!',
description: 'Please try again later.',
type: 'error',
duration: 4000,
placement: 'bottom-center'
});
}
</script>
<Section label="[Contact]">
<div>
</div>
<Card>
<div slot="headerLeft">
Contact Me
</div>
<!-- Contact Form -->
<form slot="content" class="w-full max-w-3xl mx-auto flex flex-col gap-4 text-lg" action="https://api.staticforms.xyz/submit" method="post">
<div class="hidden">
<input type="hidden" name="accessKey" value="fbb5ec04-506b-448a-a445-a2e47579a966">
<input type="hidden" name="replyTo" value="@">
<input type="text" name="honeypot" style="display: none;">
<input type="hidden" name="redirectTo" value="https://luke-else.co.uk/contact?sent=true">
</div>
<div class="flex flex-row md:flex-row gap-3">
<div class="flex-1">
<label class="block text-xs font-medium mb-1" for="name">Name</label>
<input
id="name"
name="name"
type="text"
class="w-full rounded-lg border border-gray-400 px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-600 transition placeholder-gray-400"
required
placeholder="Your name"
/>
</div>
<div class="flex-1">
<label class="block text-xs font-medium mb-1" for="email">Email</label>
<input
id="email"
name="email"
type="email"
class="w-full rounded-lg border border-gray-400 px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-600 transition placeholder-gray-400"
required
placeholder="you@email.com"
/>
</div>
<div class="flex-1">
<label class="block text-xs font-medium mb-1" for="subject">Subject</label>
<input
id="subject"
name="subject"
type="text"
class="w-full rounded-lg border border-gray-400 px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-600 transition placeholder-gray-400"
required
placeholder="Subject"
/>
</div>
</div>
<div>
<label class="block text-xs font-medium mb-1" for="message">Message</label>
<textarea
id="message"
name="message"
class="w-full rounded-lg border border-gray-400 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-600 transition min-h-[80px] placeholder-gray-400"
required
placeholder="Your message"
></textarea>
</div>
<!-- reCAPTCHA integration -->
<div class="">
<div class="g-recaptcha" data-sitekey="6LfjQAwrAAAAAIF57u8Wt4w5L5vBEWi5DfXXBuGy"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</div>
<button
type="submit"
class="self-end bg-blue-600 hover:bg-blue-700 text-white font-semibold py-1.5 px-8 rounded-lg transition"
>
Send Message
</button>
</form>
</Card>
</Section>
+73
View File
@@ -0,0 +1,73 @@
<script lang="ts">
import { loadRepos, repos } from '$lib/stores';
import { timeSince, checkImage, IMAGE_URL_SUFFIX } from '$lib/api/git';
import { toasts } from 'svelte-toasts';
import { GridGallery, Card, Loading, Section, Collapsible } from '@luke-else/component-lib';
let repoImages: Record<string, string | null> = {};
// When repos load, check for images
$: if ($repos.length) {
(async () => {
for (const repo of $repos) {
if (repoImages[repo.name] === undefined) {
const url = repo.html_url + IMAGE_URL_SUFFIX;
repoImages[repo.name] = (await checkImage(repo)) ? url : null;
}
}
})();
}
</script>
<Section label="[Repositories]">
{#await loadRepos()}
<Loading />
{:then _}
{#if $repos.length == 0}
{console.log('No Repos')}
<div style="display: none;">
{toasts.add({
title: 'Error',
description: 'Failed to load repositories',
duration: 5000,
type: 'error',
placement: 'bottom-center',
showProgress: true
})}
</div>
<p>Sorry... we can't show you anything here</p>
{/if}
<!-- Repositories loaded successfully -->
<GridGallery>
{#each $repos as repo}
<!-- <Loading /> -->
<Card
containerStyle="opacity-100 hover:opacity-100 hover:scale-[105%] md:opacity-70 transition-all duration-300"
>
<h2 slot="headerLeft">{repo.name}</h2>
<h2 slot="headerRight" class="text-sm text-gray-500">
{repo.language}
</h2>
<div class="flex flex-col gap-5" slot="content">
{repo.description}
{#if repoImages[repo.name]}
<Collapsible>
<span slot="label" class="text-lg">See More</span>
<!-- svelte-ignore a11y_img_redundant_alt -->
<img
slot="content"
src={repoImages[repo.name]}
alt="repo image"
class=""
/>
</Collapsible>
{/if}
</div>
<h3 slot="footerLeft">
Last Updated: {timeSince(repo.updated_at)}
</h3>
</Card>
{/each}
</GridGallery>
{/await}
</Section>
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 738 B

+131 -25
View File
@@ -1,26 +1,132 @@
{
"name": "Luke Else",
"job_title": "Software Engineer",
"profile_photo": "/profile.jpg",
"skills" : [
{
"skill": "Rust",
"logo": "devicon-rust-plain",
"link": "https://rust-lang.org",
"about": "Rust is a remarkable programming language that combines the best of both high-level and low-level programming. It prioritizes safety and efficiency through strict memory management and concurrent programming features, all while maintaining clean and readable code. The active Rust community makes it a valuable choice for building reliable software."
},
{
"skill": "Svelte",
"logo": "devicon-svelte-plain",
"link": "https://svelte.dev",
"about": "Svelte is an impressive web framework that stands out in the world of front-end development. It's known for its unique approach, compiling components to highly optimized vanilla JavaScript, resulting in blazing-fast web applications. Svelte's simplicity and declarative syntax make it easy to learn and use, and it encourages efficient, maintainable code. "
},
{
"skill": "Git",
"logo": "devicon-git-plain",
"link": "https://git-scm.com",
"about": "Git, a fundamental tool in version control, streamlines collaboration and code management. Its simplicity and robustness empower developers to track changes, collaborate seamlessly, and maintain code efficiently. With Git, managing and tracking code changes becomes a breeze, making it an essential tool for software development."
}
],
"about": "Hello! I'm an enthusiastic, dedicated software engineer passionate about backend development, networking, and embedded systems. I am currently employed at Thales UK and thrive on architecting robust backend solutions, optimizing data transmission, and crafting efficient embedded software. I love tackling complex challenges, collaborating with fellow professionals, and staying up-to-date with tech trends such as my current venture in learning <a href='https://rust-lang.org'>Rust-Lang</a>."
{
"name": "Luke Else",
"job_title": "Software Engineer",
"location": "Crawley, Sussex <br /> UK",
"profile_photo": "/profile.jpg",
"about": "Hello! I'm an enthusiastic, dedicated software engineer passionate about backend development, networking, and embedded systems. I am currently employed at <a href='https://www.thalesgroup.com/en'>Thales UK</a> and thrive on architecting robust backend solutions, optimizing data transmission, and crafting efficient embedded software. I love tackling complex challenges, collaborating with fellow professionals, and staying up-to-date with tech trends such as my current venture in learning <a href='https://rust-lang.org'>Rust-Lang</a>.",
"skills": [
{
"name": "Rust",
"logo": "devicon-rust-plain",
"colour": "bg-orange-400",
"link": "https://rust-lang.org",
"about": "Rust combines safety, efficiency, and clean code, making it a powerful choice for reliable software development.",
"competency": 70
},
{
"name": "C++",
"logo": "devicon-cplusplus-plain",
"colour": "bg-blue-400",
"link": "https://cplusplus.com/",
"about": "C++ offers high-level abstractions with low-level control, making it essential for performance-critical applications.",
"competency": 80
},
{
"name" : "Python",
"logo": "devicon-python-plain",
"colour": "bg-yellow-400",
"link": "https://python.org",
"about": "Python is a versatile language known for its simplicity and readability, making it ideal for rapid development and data analysis.",
"competency": 70
},
{
"name": "Git",
"logo": "devicon-git-plain",
"colour": "bg-red-400",
"link": "https://git-scm.com",
"about": "Git is an essential tool for version control, enabling efficient collaboration and streamlined code management.",
"competency": 80
},
{
"name": "Docker",
"logo": "devicon-docker-plain",
"colour": "bg-blue-500",
"link": "https://docker.com",
"about": "Docker simplifies deployment by packaging applications in lightweight containers, ensuring consistency across environments.",
"competency": 100
},
{
"name": "Kubernetes",
"logo": "devicon-kubernetes-plain",
"colour": "bg-blue-600",
"link": "https://kubernetes.io",
"about": "Kubernetes automates the deployment, scaling, and management of containerized applications, enhancing operational efficiency.",
"competency": 40
},
{
"name": "PostgreSQL",
"logo": "devicon-postgresql-plain",
"colour": "bg-blue-700",
"link": "https://postgresql.org",
"about": "PostgreSQL is a powerful, open-source relational database known for its robustness and advanced features.",
"competency": 70
},
{
"name": "MongoDB",
"logo": "devicon-mongodb-plain",
"colour": "bg-green-500",
"link": "https://mongodb.com",
"about": "MongoDB is a NoSQL database that provides flexibility and scalability for modern applications with unstructured data.",
"competency": 70
},
{
"name": "Redis",
"logo": "devicon-redis-plain",
"colour": "bg-red-600",
"link": "https://redis.io",
"about": "Redis is an in-memory data structure store, used as a database, cache, and message broker for high-performance applications.",
"competency": 30
},
{
"name": "JavaScript",
"logo": "devicon-javascript-plain",
"colour": "bg-yellow-500",
"link": "https://javascript.com",
"about": "JavaScript is a versatile language that powers dynamic web applications and enhances user interactivity.",
"competency": 60
},
{
"name": "Tailwind CSS",
"logo": "devicon-tailwindcss-plain",
"colour": "bg-blue-800",
"link": "https://tailwindcss.com/",
"about": "Tailwind CSS is a utility-first CSS framework that enables rapid UI development with a focus on customization and responsiveness.",
"competency": 60
},
{
"name": "Svelte",
"logo": "devicon-svelte-plain",
"colour": "bg-orange-400",
"link": "https://svelte.dev",
"about": "Svelte compiles to optimized JavaScript, offering a fast, efficient, and maintainable front-end development experience.",
"competency": 55
}
],
"timeline" : [
{
"duration" : "April 2025 - Present",
"title" : "Thales UK (DDCC) - Software Engineer",
"description" : "As a 3rd year apprentice at Thales UKs Digital Data Competency Centre, I have taken on responsibility for developing microservices that encapsulate Machine Learning models provided by R&D teams, helping to advance product readiness. These services are primarily written in Python and deployed to Kubernetes clusters for use across the business. Our team also designs and maintains CI/CD pipelines to automate the deployment of both these services and their supporting infrastructure."
},
{
"duration" : "September 2022 - April 2025",
"title" : "Thales UK (ISR) - Software Engineer",
"description" : "As a software engineering apprentice at Thales UK, Intelligence Surveillance and Reconnaissance, I worked within an agile team of six engineers, contributing to the ongoing development of a C++ system for the MOD. My role involved collaborating closely with colleagues, following Scrum methodologies, and leveraging internal frameworks to enhance and maintain the existing platform."
},
{
"duration" : "September 2022 - Present",
"title" : "University of Warwick - Digital and Technology Solutions",
"description" : "The apprenticeship includes allocated time for studying a Digital and Thechnology Solutions degree with the University of Warwick, including modules relevant to business management, devlopment processes and data integrity etc..."
},
{
"duration" : "September 2020 - July 2022",
"title" : "The Norton Knatchbull School (A-Levels)",
"description" : "Computer Science (<b>A*</b>) <br /> Mathematics (<b>A</b>) <br /> Physics (<b>A</b>)"
},
{
"duration" : "September 2015 - July 2020",
"title" : "The Norton Knatchbull School (GCSEs)",
"description" : "Computer Science (<b>9</b>) <br /> Physics (<b>9</b>) <br /> Chemistry (<b>9</b>) <br /> Biology (<b>9</b>) <br /> Geography (<b>9</b>) <br /> FSMQ (C) <br /> Maths (8) <br /> Spanish (7) <br /> English (Literature & Language) (7, 7) <br />"
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 KiB

After

Width:  |  Height:  |  Size: 67 KiB

+10 -18
View File
@@ -1,18 +1,10 @@
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/kit/vite';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
preprocess: vitePreprocess(),
kit: {
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
adapter: adapter()
}
};
export default config;
// import adapter from '@sveltejs/adapter-auto';
import adapter from '@sveltejs/adapter-node';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
const config = {
preprocess: vitePreprocess(),
kit: { adapter: adapter() }
};
export default config;
+18 -17
View File
@@ -1,17 +1,18 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}
+10 -6
View File
@@ -1,6 +1,10 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()]
});
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [
tailwindcss(),
sveltekit(),
]
});