diff --git a/LICENCE b/LICENCE
index d8358e6..79d4aef 100644
--- a/LICENCE
+++ b/LICENCE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2023 James Macmillan
+Copyright (c) 2025 James Macmillan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
diff --git a/src/components/content/body/CoverLetterContent.tsx b/src/components/content/body/CoverLetterContent.tsx
index ea21c42..b2507fd 100644
--- a/src/components/content/body/CoverLetterContent.tsx
+++ b/src/components/content/body/CoverLetterContent.tsx
@@ -39,7 +39,7 @@ const SeekingContent2 = () => (
<>
Hey, I'm James, a Senior Software Engineer based in the Midlands, and I appreciate you
- taking the time to review my CV.
+ taking the time to check out my CV.
I'm currently seeking full-time remote opportunities as a{' '}
diff --git a/src/components/content/body/SkillsContentNew.tsx b/src/components/content/body/SkillsContentNew.tsx
index 8ba9d9c..e9e5a8c 100644
--- a/src/components/content/body/SkillsContentNew.tsx
+++ b/src/components/content/body/SkillsContentNew.tsx
@@ -33,17 +33,19 @@ export const SkillsContent = () => {
<>
- Below you will find a summary of some of the key technologies and tooling that I have experience with. If you
- would like to know if I've used a particular technology that's not listed, please get in touch.
+ Here's a quick overview of the technologies and tools I've worked with over the years. If
+ there's something specific you're curious about that's not listed, feel free to reach out —
+ there's a good chance I've come across it.
- Over the last decade I've picked up a wealth of experience in web and mobile application development.
- This has lead to lots of experience with UX/UI Design, Unit Testing, CI/CD, Software Architecture, DBMS,
- Performance Optimisation, and more.
+ Over the last decade, I've built up a broad range of experience in web and mobile development.
+ That's included everything from UX/UI design and performance tuning to unit testing, CI/CD pipelines,
+ software architecture, and working with various databases.
- Throughout my career I have mentored and lead other developers of varying skill levels. I've worked in a
- variety of teams with a variety of processes, and I'm most comfortable with Agile methodologies.
+ I've also had the chance to lead and mentor developers at all levels, and I've worked across a mix
+ of teams and processes — though I'm happiest in a well-run Agile environment with good people and a clear
+ purpose.
diff --git a/src/components/content/sidebar/Availability.tsx b/src/components/content/sidebar/Availability.tsx
index 789b751..8b65c33 100644
--- a/src/components/content/sidebar/Availability.tsx
+++ b/src/components/content/sidebar/Availability.tsx
@@ -4,6 +4,6 @@ import { PropsWithClassName } from '../../../types/PropsWithClassName';
export const Availability = () => (
} title={'Availability'}>
- Immediate
+ 1 Month
);
diff --git a/src/components/content/sidebar/Interests.tsx b/src/components/content/sidebar/Interests.tsx
index 1d0deb3..2b202e8 100644
--- a/src/components/content/sidebar/Interests.tsx
+++ b/src/components/content/sidebar/Interests.tsx
@@ -9,13 +9,14 @@ export const Interests = () => (
- I'm a keen photographer, avid reader, and Cyclist. I find my interests changing over time but the main
- few stay the same.
+ Outside of work, I'm a keen photographer and avid reader, and I've recently been getting really into
+ 3D modelling. My interests shift and grow over time, but a few creative passions have stuck with me.
- When I'm not working, I like to continuously learn. In the last few years I've taken up{' '}
- Game Programming, Machine Learning, and{' '}
- Data Science. I find that learning new paradigms and languages keeps me sharp.
+ I enjoy learning new things to stretch my thinking and grow as a developer — over the past few years I've
+ explored game programming, machine learning, and{' '}
+ parametric modelling. Picking up new paradigms and ways of thinking helps me stay sharp
+ and keeps my curiosity alive.
diff --git a/src/components/content/sidebar/Stacks.tsx b/src/components/content/sidebar/Stacks.tsx
index 04f74f5..2f3d83d 100644
--- a/src/components/content/sidebar/Stacks.tsx
+++ b/src/components/content/sidebar/Stacks.tsx
@@ -7,14 +7,16 @@ export const Stacks = () => (
- My Ideal working stack is Node.js on Lambdas, or in Containers. With a modern RDS & Object Store. On the front
- end I like working in React or another component-based flux framework, with Tailwind and a decent bundler. On
- mobile I like Ionic but I'm currently transitioning to React Native.
+ My favourite stack these days is Node.js running on Lambdas or containers, backed by a solid RDS and object
+ storage setup. On the front end, I enjoy working with React (or similar component-based frameworks), styled with
+ Tailwind and bundled up nicely. For mobile, I've been a long-time fan of Ionic but I'm open to
+ exploring other frameworks like React Native or Flutter, depending on the project requirements.
- In the recent past I've worked on more traditional stacks, deploying Node & .net core APIs to AWS on
- containers, EC2 instances as well as lambdas. I've also worked with multiple static site and SSR deployment
- patterns. My last few roles have used Angular heavily so I've got tonnes of Angular experience.
+ That said, I've worked across a range of setups — from traditional stacks with Node and .NET Core APIs
+ deployed on AWS (via containers, EC2s, and Lambdas), to static and server-side rendered sites. Recently
+ I've enjoyed working on cloud-native applications in AWS and GCP, leveraging the power of serverless
+ architectures and microservices to build scalable and efficient systems.
diff --git a/src/components/ui/Footer.tsx b/src/components/ui/Footer.tsx
index 0ee2738..52cbab8 100644
--- a/src/components/ui/Footer.tsx
+++ b/src/components/ui/Footer.tsx
@@ -26,7 +26,7 @@ export const Footer = () => (
- © 2023 James Macmillan. All Rights Reserved.
+ © 2025 James Macmillan. All Rights Reserved.
);
diff --git a/src/data/Expereince.tsx b/src/data/Expereince.tsx
index b143838..eb63350 100644
--- a/src/data/Expereince.tsx
+++ b/src/data/Expereince.tsx
@@ -58,7 +58,7 @@ export const Experience: ExperienceEntry[] = [
],
detail: [
[
- 'Joined the Media Delivery and Ingestion team, where I worked on building and maintaining large-scale, serverless applications that handled the ingestion, processing, and global distribution of music and metadata.',
+ 'I joined the Media Delivery and Ingestion team, where I worked on building and maintaining large-scale, serverless applications that handled the ingestion, processing, and global distribution of music and its metadata.',
'I contributed to re-platforming key parts of the output pipeline, including pricing logic and global availability handling, and helped implement a scalable document store to support responsive release ingestion.',
],
[
diff --git a/src/data/Profile.tsx b/src/data/Profile.tsx
index dae936c..f6d3293 100644
--- a/src/data/Profile.tsx
+++ b/src/data/Profile.tsx
@@ -1,6 +1,4 @@
export const Profile = [
- 'Agile, Full Stack Developer with team leadership, presentation, design, UX/UI, and application architectural experience.',
- 'Passionate and articulate, with proven knowledge in all aspects of Hybrid Mobile and Progressive Web app development.',
- 'Experienced in developing mobile and web applications across the extended full-stack, with teams of developers at varying levels of experience.',
- 'A strong love of technology, solving complex business problems with a team of like-minded people.',
+ "I'm a friendly and passionate Full Stack Developer with a strong background in Agile delivery, design, UX/UI, and application architecture. I love working across the full stack — from front-end and mobile apps to cloud-native serverless apis and data stores — and have a particular focus on building robust hybrid mobile and progressive web apps.",
+ "Over the years, I've worked closely with teams of all experience levels, helping to bring ideas to life and solve tricky business problems with practical, well-designed solutions. I'm at my best when I'm collaborating with others who love technology as much as I do, and when we're building something meaningful, together.",
];
diff --git a/src/data/Skills.tsx b/src/data/Skills.tsx
index 9da96c0..c6075af 100644
--- a/src/data/Skills.tsx
+++ b/src/data/Skills.tsx
@@ -30,13 +30,6 @@ export type Skill = Sortable & {
};
export const rawSkills: Skill[] = [
- {
- slug: 'typescript',
- name: 'Typescript',
- icon: 'devicon-typescript-plain',
- type: SkillType.Language,
- layer: SkillLayer.FullStack,
- },
{
slug: 'html',
name: 'HTML 5',
@@ -58,34 +51,6 @@ export const rawSkills: Skill[] = [
type: SkillType.Language,
layer: SkillLayer.FullStack,
},
- {
- slug: 'angular',
- name: 'Angular',
- type: SkillType.Framework,
- layer: SkillLayer.FrontEnd,
- icon: 'devicon-angularjs-plain',
- },
- {
- slug: 'react-js',
- name: 'React',
- type: SkillType.Framework,
- layer: SkillLayer.FrontEnd,
- icon: 'devicon-react-original',
- },
- {
- slug: 'redux-js',
- name: 'Redux',
- type: SkillType.Framework,
- layer: SkillLayer.FrontEnd,
- icon: 'devicon-redux-original',
- },
- {
- slug: 'tailwind',
- name: 'Tailwind',
- type: SkillType.Framework,
- layer: SkillLayer.FrontEnd,
- icon: 'devicon-tailwindcss-plain',
- },
{
slug: 'node-js',
name: 'NodeJS',
@@ -100,6 +65,20 @@ export const rawSkills: Skill[] = [
layer: SkillLayer.ServerSide,
icon: 'devicon-dotnetcore-plain',
},
+ {
+ slug: 'aws',
+ name: 'AWS',
+ icon: 'devicon-amazonwebservices-plain',
+ type: SkillType.Platform,
+ layer: SkillLayer.ServerSide,
+ },
+ {
+ slug: 'gcp',
+ name: 'GCP',
+ icon: 'devicon-googlecloud-plain',
+ type: SkillType.Platform,
+ layer: SkillLayer.ServerSide,
+ },
{
slug: 'c-sharp',
name: 'C#',
@@ -128,13 +107,6 @@ export const rawSkills: Skill[] = [
layer: SkillLayer.FrontEnd,
icon:
,
},
- {
- slug: 'sass',
- name: 'SASS',
- type: SkillType.Language,
- layer: SkillLayer.FrontEnd,
- icon: 'devicon-sass-plain',
- },
{
slug: 'capacitor',
name: 'Capacitor',
@@ -142,13 +114,6 @@ export const rawSkills: Skill[] = [
type: SkillType.Platform,
layer: SkillLayer.Mobile,
},
- {
- slug: 'cordova',
- name: 'Cordova',
- icon:
,
- type: SkillType.Platform,
- layer: SkillLayer.Mobile,
- },
{
slug: 'ionic',
name: 'Ionic',
@@ -170,20 +135,6 @@ export const rawSkills: Skill[] = [
type: SkillType.Platform,
layer: SkillLayer.Mobile,
},
- {
- slug: 'circle-ci',
- name: 'CircleCI',
- icon: 'devicon-circleci-plain',
- type: SkillType.Platform,
- layer: SkillLayer.Devops,
- },
- {
- slug: 'aws',
- name: 'AWS',
- icon: 'devicon-amazonwebservices-plain',
- type: SkillType.Platform,
- layer: SkillLayer.ServerSide,
- },
{
slug: 'webpack',
name: 'Webpack',
@@ -212,41 +163,6 @@ export const rawSkills: Skill[] = [
layer: SkillLayer.Database,
type: SkillType.Platform,
},
- {
- slug: 'aws-dynamodb',
- name: 'AWS DynamoDB',
- type: SkillType.Platform,
- layer: SkillLayer.Database,
- icon:
,
- },
- {
- slug: 'firebase',
- name: 'Firebase',
- type: SkillType.Platform,
- layer: SkillLayer.Database,
- icon: 'devicon-firebase-plain',
- },
- {
- slug: 'jest',
- name: 'Jest',
- icon: 'devicon-jest-plain',
- type: SkillType.Library,
- layer: SkillLayer.Devops,
- },
- {
- slug: 'jasmine',
- name: 'Jasmine',
- icon: 'devicon-jasmine-plain',
- type: SkillType.Library,
- layer: SkillLayer.Devops,
- },
- {
- slug: 'adobe-illustrator',
- name: 'Illustrator',
- icon: 'devicon-illustrator-plain',
- type: SkillType.Library,
- layer: SkillLayer.FrontEnd,
- },
{
slug: 'adobe-photoshop',
name: 'Photoshop',
@@ -269,11 +185,32 @@ export const rawSkills: Skill[] = [
layer: SkillLayer.Devops,
},
{
- slug: 'nativescript',
- name: 'Nativescript',
+ slug: 'angular',
+ name: 'Angular',
type: SkillType.Framework,
- layer: SkillLayer.Mobile,
- icon:
,
+ layer: SkillLayer.FrontEnd,
+ icon: 'devicon-angularjs-plain',
+ },
+ {
+ slug: 'typescript',
+ name: 'Typescript',
+ icon: 'devicon-typescript-plain',
+ type: SkillType.Language,
+ layer: SkillLayer.FullStack,
+ },
+ {
+ slug: 'react-js',
+ name: 'React',
+ type: SkillType.Framework,
+ layer: SkillLayer.FrontEnd,
+ icon: 'devicon-react-original',
+ },
+ {
+ slug: 'tailwind',
+ name: 'Tailwind',
+ type: SkillType.Framework,
+ layer: SkillLayer.FrontEnd,
+ icon: 'devicon-tailwindcss-plain',
},
];
diff --git a/tailwind.config.cjs b/tailwind.config.cjs
index 9c8c9cc..224d9f7 100644
--- a/tailwind.config.cjs
+++ b/tailwind.config.cjs
@@ -40,7 +40,7 @@ module.exports = {
'light-dark': colors.stone['100'],
'lighter': colors.stone['600'],
'lighter-dark': colors.stone['300'],
- 'primary': colors.amber['600'],
+ 'primary': colors.violet['500'],
'accent': colors.fuchsia['500'],
'tertiary': colors.sky['500'],
},