From 04af3b8c296e5f91e7e8de4d3892c6b5a3245396 Mon Sep 17 00:00:00 2001 From: Jacqueline B Date: Tue, 28 Oct 2025 21:56:42 -0700 Subject: [PATCH 1/5] These are all files from my other project that i transfered into this one. last save in other project --- .gitignore | 2 + README 2.md | 3 + blog.html | 35 +++ contact.html | 52 ++++ ...ek_by_sailormoonrocko_dg5ur4h-fullview.jpg | Bin 0 -> 10766 bytes index.html | 44 +++ portfolio.html | 45 +++ resume.html | 78 ++++++ src/blog.ts | 8 + styles.css | 264 ++++++++++++++++++ tsconfig.json | 44 +++ 11 files changed, 575 insertions(+) create mode 100644 .gitignore create mode 100644 README 2.md create mode 100644 blog.html create mode 100644 contact.html create mode 100644 images/sexy_shrek_by_sailormoonrocko_dg5ur4h-fullview.jpg create mode 100644 index.html create mode 100644 portfolio.html create mode 100644 resume.html create mode 100644 src/blog.ts create mode 100644 styles.css create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..68b21f0aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +.DS_Store diff --git a/README 2.md b/README 2.md new file mode 100644 index 000000000..1337bcfd8 --- /dev/null +++ b/README 2.md @@ -0,0 +1,3 @@ +# Jacqueline's Personal Website +This is a personal website built using the Hack4Impact Starter Pack! +[Visit it Here!](https://jlinnie.github.io) diff --git a/blog.html b/blog.html new file mode 100644 index 000000000..e057df459 --- /dev/null +++ b/blog.html @@ -0,0 +1,35 @@ + + + + + Blog + + + + + + +
+

Blog

+
+ +
+ + +
+ + This is the page for my blog. + + diff --git a/contact.html b/contact.html new file mode 100644 index 000000000..5eb6f5ece --- /dev/null +++ b/contact.html @@ -0,0 +1,52 @@ + + + + + Contact Information + + + + + + +
+

Contact Information

+
+

+ + + + + + + + + + + +
+ + +
+ + This is the page for my contact information + + diff --git a/images/sexy_shrek_by_sailormoonrocko_dg5ur4h-fullview.jpg b/images/sexy_shrek_by_sailormoonrocko_dg5ur4h-fullview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3ffa4857e64f351c1b4bbfeebfc050599e5fb0a GIT binary patch literal 10766 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⩔4KF=_zWA1hVPhE2;O( zkw+HH0mW-_x?){#PNMV+%FbgZ2{Qc&}ji?!w2Km zc|Ntc;I+a{8rmm{8okfH)lS%k)#PzVKcY5$*L!{2>~PXt94OEIa2E|YVP$h>?qI*S zcj+8{pNAsxcE`LQz#g<|OH1W#`}YoDSm9RHc$L<-@Ap}TcA&bxU*wRr{oYU`(->c&)n6kgk1pcPfOC4>%TIjn0ATp*7rV~t zrpfY7w8TF-d7T=Wy^pxeDwA`U6KSkVT)+QN-S*l4X6|f>|KjImQZ;QxNW=9I-rJDZ z{lkxl8^`65XO?e>qY1wx)0i_+Wn9SpP1^O*(Bh6qZEN-3qkShcY&!zb z&upaUCeCHJxXjr4+{5GM+L~(S%wnc;UilMr@nxdio1H@l2qbRsy#rA4vD{A)n!#B2 zDXVECPT-&iz{cNjws|ikd0BbDA^8= z1J>^y-vLaj34^@!b+383D7f<5AEKLbg^I$=*vsI)rz0cZsakYxFqryZ&5rdR@@nc7 zD_~QArOF}$9)Pd^iiTXI_G=h(w6C=t{GmyjcVAu zh_c=OejF>uw@xxLo{3V7atYs#+j~$|xBg89sq!6Q{e8t+8(+KNW7}Eft=jBB+V^_W z6Thh{fRzmwSqQ!dh`s?@0s9v`u}2GZQY+E#o%{od=hjGM^fCwGV_Z{nw8w?}xo970@oWd&(;zge@ zJMh7#5NWKFQLlq;ymx%U8IC^-j#-~4*BReY=Pg%y8xrR&NPx_wbC(B1q}$IHJ&Lf8 zAMAGmZCocQGs{MgNCtNOdU`d+#H>g~9H&-?Kf;A)tABw2cyhR1PvXJ-V&as`=mwci zUmSoiB9w85UpV3&E!nBkreKd5oQ`S@Qq$kr`UvXALhjF5DC9{$-Cq~vZX?ov!{{rp zB;>G#=M0d@IHyeLWX+l_`euap*G|c9Fl6U9@(*PQ-6!0ddEx6=n0vP9JM{)-L))5* zcoRFD^dAAT#SidsJ{D_ddjD-m(nEFq+Pc5~m0K!wUlW&r*DN^jy@sFc&LeG_45JZc z&j5j!KJ;dX67{A!3mr?`%%dr&W0R4T6tMa&(FOb4LqXrBDoM~(Kq436sxT@*hCy^Q zfyM91M6M0OAIYz(SmpRO^mCDDwYB5sw6?LH^{+JX7RX`(#$?Y7*^_pyr4N*+BT3#CPYlER1 z2}3&IdQ=kH6B>x7%5gNN6zQ_Xv#u=jaX@8g2(>BI`nV^+*G>U6Y^=&HmJCQjsgXZ{ z1PDM761zyTwM35BNoYzA?vOVGHiC~m@r3vN;-%l4re9`N+D#UvWb#TXRWNiId!P6! z#LGUZi@0^@b6EBO8W4w|B;{J;uk~uv>Ap=vDr5?kGg}Z*lp0ADTlQ=atu1y)l&>Ao z?Uy-|r0Vw_g!`-I8x3Naq&T{Sqb}sQthbEO<7q-k!%5C* + + + + Personal Website + + + + + +
+
+ +
+

Jacqueline Bartholomew's Personal Website

+
+
+ sexy shrek> +
+ +
+ +

Welcome to my personal website! I'm Jacqueline Bartholomew, a current undergraduate student and apiring developer at + Cal Poly San Luis Obispo. This site is a space where I share my ideas, projects, and creative experiments as I keep learning and growing. Take a look around and get to know what I’ve been working on!

+
+
+
+
+ © 2025 My Personal Website | All Rights Reserved +
+ + + diff --git a/portfolio.html b/portfolio.html new file mode 100644 index 000000000..263d8e33d --- /dev/null +++ b/portfolio.html @@ -0,0 +1,45 @@ + + + + + Portfolio + + + + + + +
+

Portfolio

+
+ sexy shrek>
+
+

+ random text for first paragraph +

+

+ random text for second paragraph +

+ Learn More +
+ + + + +
+
+ © 2025 My Personal Website | All Rights Reserved +
+ This is the page for my portfolio + + diff --git a/resume.html b/resume.html new file mode 100644 index 000000000..d70b4e956 --- /dev/null +++ b/resume.html @@ -0,0 +1,78 @@ + + + + + Resume + + + + + + +
+

Resume

+ Download Resume +
+

Education

+
+

Title Here

+ +
+

Coursework

+
+

Title Here

+ +
    +
  • Example Course 1
  • +
  • Example Course 2
  • +
+
+

Skills

+
+

Title Here

+ +
    +
  • Example Skill 1
  • +
  • Example Skill 2
  • +
+
+

Projects

+
+

Title Here

+ +

Description Here

+
+

Experience

+
+

Title Here

+ +

Description Here

+
+ +
+
+
+
+
+ +
+ + +
+
+ © 2025 My Personal Website | All Rights Reserved +
+ This is the page for my resume. + + diff --git a/src/blog.ts b/src/blog.ts new file mode 100644 index 000000000..20b620c37 --- /dev/null +++ b/src/blog.ts @@ -0,0 +1,8 @@ +type Blog = { + title: string; + date: string; + description: string; + image: string; + imageAlt: string; + slug: string; +}; \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..4ced14d01 --- /dev/null +++ b/styles.css @@ -0,0 +1,264 @@ +:root { + /* variables */ + --cg-black: rgb(30, 32, 32); + --cg-blue: rgb(36, 94, 255); + --cg-grey: rgb(243, 243, 243); + --cg-white: rgb(255, 255, 255); +} + +html { + height: 100%; +} + +body { + background: var(--cg-grey); + position: relative; + min-height: 100vh; + padding: 0; + margin: 0; + font-family: monospace; +} + +/* CSS for navigation */ + +.navbar { + position: -webkit-sticky; + position: sticky; + top: 0; + width: 100%; + height: 7%; + z-index: 10; + + display: flex; + justify-content: space-between; + align-items: center; + text-align: center; + + background-color: var(--cg-black); + color: var(--cg-white); + padding: 0px 0px; + + /* Debug border */ + /* border: solid red; */ +} + +.nav-list { + display: flex; + flex-direction: row; + position: relative; + right: 30px; + list-style: none; + + /* Debug border */ + /* border: solid blue; */ +} + +.navbar a { + color: var(--cg-white); + font-weight: bold; + margin: 0 12px; + text-decoration: none; + letter-spacing: 2px; + + font-family: monospace; +} + +.navbar a:hover { + color: var(--cg-blue); + text-decoration: underline; +} + +.navbar a:active { + color: var(--cg-blue); +} + +.logo a { + font-family: Georgia; +} + +.logo a:hover { + text-decoration: None; +} + +main { + padding: 0 20px 40px 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.page-title { + display: flex; + justify-content: center; + font-size: 40px; + font-family: Georgia; +} + +/* CSS for portfolio grid */ + +.project { + display: flex; + flex-direction: row; + max-width: 100%; + margin: 1em 0 2em 0; + + /* Debug border */ + /* border: 2px solid blue; */ +} + +.item-link { + width: 70%; + + /* Debug border */ + /* border: 2px solid red; */ +} + +.project-image { + object-fit: cover; + width: 100%; + height: 500px; + flex-basis: 50px; + flex-grow: 2; + + /* Debug border */ + /* border: 2px solid black; */ +} + +.project-details { + display: flex; + background-color: var(--cg-white); + width: 30%; + height: 500px; + flex-shrink: 1; + padding: 0 20px; + margin: 0px; + line-height: 1.5; + overflow: scroll; + + flex-direction: column; + text-align: center; + justify-content: center; + + /* Debug border */ + /* border: 2px solid green; */ +} + +.project-details a { + color: var(--cg-black); + text-decoration: none; + font-weight: bold; + letter-spacing: 1px; +} + +.project-details a:hover { + color: var(--cg-blue); + text-decoration: underline; +} + +.project-details { + font-weight: lighter; +} + +.project-name { + font-weight: bold; + font-size: 20px; +} + +/* CSS for home page */ + +.about { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px; + background-color: #f8f8f8; + border: 1px solid #ccc; + border-radius: 5px; + /* box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); */ +} + +.about-image img { + max-width: 300px; + border-radius: 3px; + /* box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); */ +} + +.about-text { + flex: 1; + margin-left: 20px; +} + +.about-text h2 { + font-size: 24px; + margin-bottom: 10px; +} + +.about-text p { + font-size: 16px; + line-height: 1.5; +} + +/* CSS for resume page */ + +.button { + background-color: var(--cg-black); + border: none; + color: var(--cg-white); + + font-family: monospace; + + padding: 5px 7px; + text-align: center; + + border-radius: 2px; +} + +.button:hover { + background-color: var(--cg-blue); +} + +.resume h2 { + font-family: Georgia; +} + +/* CSS for contact form */ + +label { + display: block; + margin-bottom: 8px; + font-family: Georgia; + font-weight: bold; +} + +input[type="text"], +input[type="email"], +textarea { + width: 100%; + padding: 10px; + margin-bottom: 15px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 16px; + resize: none; +} + +/* Add some spacing to the form */ +form { + width: 500px; + margin: 0 auto; +} + +/* CSS for footer */ + +.footer { + display: flex; + justify-content: center; + align-items: center; + background-color: var(--cg-black); + color: var(--cg-white); + position: absolute; + bottom: 0; + width: 100%; + height: 2.5rem; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..cec4a3a4b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,44 @@ +{ + // Visit https://aka.ms/tsconfig to read more about this file + "compilerOptions": { + // File Layout + // "rootDir": "./src", + // "outDir": "./dist", + + // Environment Settings + // See also https://aka.ms/tsconfig/module + "module": "nodenext", + "target": "esnext", + "types": [], + // For nodejs: + // "lib": ["esnext"], + // "types": ["node"], + // and npm install -D @types/node + + // Other Outputs + "sourceMap": true, + "declaration": true, + "declarationMap": true, + + // Stricter Typechecking Options + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + + // Style Options + // "noImplicitReturns": true, + // "noImplicitOverride": true, + // "noUnusedLocals": true, + // "noUnusedParameters": true, + // "noFallthroughCasesInSwitch": true, + // "noPropertyAccessFromIndexSignature": true, + + // Recommended Options + "strict": true, + "jsx": "react-jsx", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "noUncheckedSideEffectImports": true, + "moduleDetection": "force", + "skipLibCheck": true, + } +} From 25de16a26cde96f74f415a292156981a78ac86cc Mon Sep 17 00:00:00 2001 From: Jacqueline B Date: Tue, 28 Oct 2025 22:01:03 -0700 Subject: [PATCH 2/5] added two lists of blogs --- src/blog.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/blog.ts b/src/blog.ts index 20b620c37..276e55250 100644 --- a/src/blog.ts +++ b/src/blog.ts @@ -5,4 +5,23 @@ type Blog = { image: string; imageAlt: string; slug: string; -}; \ No newline at end of file +}; + +const blogs: Blog[] = [ + { + title: "My First Blog Post", + date: "2025-10-28", + description: "This is my first blog post where I share what I learned starting the bootcamp.", + image: "./images/first-post.png", + imageAlt: "Screenshot of my first blog project", + slug: "my-first-blog-post" + }, + { + title: "Learning TypeScript", + date: "2025-10-27", + description: "A quick overview of how TypeScript makes JavaScript safer and easier to maintain.", + image: "./images/learning-ts.png", + imageAlt: "TypeScript logo and code snippet", + slug: "learning-typescript" + } +]; \ No newline at end of file From 875072dbc8baa311d37e0b8ac935b239b287cccb Mon Sep 17 00:00:00 2001 From: Jacqueline B Date: Thu, 30 Oct 2025 22:04:03 -0700 Subject: [PATCH 3/5] changed the routing of the blog post --- blog.html | 7 +- blogs/learning-typescript.html | 0 blogs/my-first-blog-post.html | 0 contact.html | 1 - portfolio.html | 1 - resume.html | 25 ++-- src/blog.d.ts | 2 + src/blog.d.ts.map | 1 + src/blog.js | 29 +++++ src/blog.js.map | 1 + src/blog.ts | 21 +++- styles.css | 211 +++++++++++++++++++++++++++------ 12 files changed, 247 insertions(+), 52 deletions(-) create mode 100644 blogs/learning-typescript.html create mode 100644 blogs/my-first-blog-post.html create mode 100644 src/blog.d.ts create mode 100644 src/blog.d.ts.map create mode 100644 src/blog.js create mode 100644 src/blog.js.map diff --git a/blog.html b/blog.html index e057df459..2053f3d27 100644 --- a/blog.html +++ b/blog.html @@ -21,15 +21,14 @@

Blog

-
- -
+
+
© 2025 My Personal Website | All Rights Reserved
- This is the page for my blog. + diff --git a/blogs/learning-typescript.html b/blogs/learning-typescript.html new file mode 100644 index 000000000..e69de29bb diff --git a/blogs/my-first-blog-post.html b/blogs/my-first-blog-post.html new file mode 100644 index 000000000..e69de29bb diff --git a/contact.html b/contact.html index 5eb6f5ece..3a951a37c 100644 --- a/contact.html +++ b/contact.html @@ -47,6 +47,5 @@

Contact Information

© 2025 My personal website | All Rights Reserved
- This is the page for my contact information diff --git a/portfolio.html b/portfolio.html index 263d8e33d..88f57212a 100644 --- a/portfolio.html +++ b/portfolio.html @@ -40,6 +40,5 @@

Portfolio

© 2025 My Personal Website | All Rights Reserved
- This is the page for my portfolio diff --git a/resume.html b/resume.html index d70b4e956..b6e0decce 100644 --- a/resume.html +++ b/resume.html @@ -34,7 +34,7 @@

Coursework

Title Here

    -
  • Example Course 1
  • +
  • This is a special example course that tests the limit of this page to see how much it can handle
  • Example Course 2
@@ -49,15 +49,25 @@

Title Here

Projects

-

Title Here

+

Title

Description Here

-

Experience

-
-

Title Here

- -

Description Here

+

Experience

+ +
+

Title Here

+ +

Description Here

+
+ +
+

Title Here for the second one

+ +

If you're looking for random paragraphs, you've come to the right place. When a random word or a random sentence isn't quite enough, the next logical step is to find a random paragraph. We created the Random Paragraph Generator with you in mind. The process is quite simple. Choose the number of random paragraphs you'd like to see and click the button. Your chosen number of paragraphs will instantly appear. + +

+
@@ -73,6 +83,5 @@

Title Here

© 2025 My Personal Website | All Rights Reserved
- This is the page for my resume. diff --git a/src/blog.d.ts b/src/blog.d.ts new file mode 100644 index 000000000..221acd4c7 --- /dev/null +++ b/src/blog.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=blog.d.ts.map \ No newline at end of file diff --git a/src/blog.d.ts.map b/src/blog.d.ts.map new file mode 100644 index 000000000..53fcf9550 --- /dev/null +++ b/src/blog.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"blog.d.ts","sourceRoot":"","sources":["blog.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/src/blog.js b/src/blog.js new file mode 100644 index 000000000..b8c2bdf58 --- /dev/null +++ b/src/blog.js @@ -0,0 +1,29 @@ +var blogs = [ + { + title: "My First Blog Post", + date: "2025-10-28", + description: "This is my first blog post where I share what I learned starting the bootcamp.", + image: "./images/first-post.png", + imageAlt: "Screenshot of my first blog project", + slug: "my-first-blog-post" + }, + { + title: "Learning TypeScript", + date: "2025-10-27", + description: "A quick overview of how TypeScript makes JavaScript safer and easier to maintain.", + image: "./images/learning-ts.png", + imageAlt: "TypeScript logo and code snippet", + slug: "learning-typescript" + } +]; +document.addEventListener('DOMContentLoaded', function () { + var container = document.getElementById('blog-container'); + if (container) { + blogs.forEach(function (blog) { + var div = document.createElement('div'); + div.className = 'blog-card'; + div.innerHTML = "\n \n

").concat(blog.title, "

\n

").concat(blog.date, "

\n \"").concat(blog.imageAlt,\n

").concat(blog.description, "

\n
\n "); + container.appendChild(div); + }); + } +}); diff --git a/src/blog.js.map b/src/blog.js.map new file mode 100644 index 000000000..3e5e863f2 --- /dev/null +++ b/src/blog.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blog.js","sourceRoot":"","sources":["blog.ts"],"names":[],"mappings":";;AASC,MAAM,KAAK,GAAW;IACrB;QACE,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,gFAAgF;QAC7F,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,qCAAqC;QAC/C,IAAI,EAAE,oBAAoB;KAC3B;IACD;QACE,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,mFAAmF;QAChG,KAAK,EAAE,0BAA0B;QACjC,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE,qBAAqB;KAC5B;CACF,CAAC;AAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAuB,CAAC;AAElF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,SAAS,GAAG;UACR,IAAI,CAAC,KAAK;SACX,IAAI,CAAC,IAAI;gBACF,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,QAAQ;SACxC,IAAI,CAAC,WAAW;GACtB,CAAC;IACF,IAAI,SAAS;QAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/src/blog.ts b/src/blog.ts index 276e55250..e9adce515 100644 --- a/src/blog.ts +++ b/src/blog.ts @@ -24,4 +24,23 @@ const blogs: Blog[] = [ imageAlt: "TypeScript logo and code snippet", slug: "learning-typescript" } -]; \ No newline at end of file +]; + +document.addEventListener('DOMContentLoaded', () => { // safety measure + const container = document.getElementById('blog-container'); + if (container) { + blogs.forEach((blog) => { + const div = document.createElement('div'); + div.className = 'blog-card'; + div.innerHTML = ` + +

${blog.title}

+

${blog.date}

+ ${blog.imageAlt} +

${blog.description}

+
+ `; + container.appendChild(div); + }); + } +}); \ No newline at end of file diff --git a/styles.css b/styles.css index 4ced14d01..ffdcd667a 100644 --- a/styles.css +++ b/styles.css @@ -1,9 +1,20 @@ :root { - /* variables */ - --cg-black: rgb(30, 32, 32); - --cg-blue: rgb(36, 94, 255); - --cg-grey: rgb(243, 243, 243); - --cg-white: rgb(255, 255, 255); + --cg-black: #2a2d2d; /* ink */ + --cg-blue: #6cc5ff; /* pastel sky */ + --cg-grey: #f9fbff; /* page background */ + --cg-white: #ffffff; + + /* palette accents */ + --cg-pink: #ffb3c7; /* bubblegum */ + --cg-lilac: #cdb4ff; /* soft lilac */ + --cg-mint: #b8f2e6; /* mint */ + --cg-lemon: #fff4a8; /* lemon */ + + /* cool shadow stuff */ + --radius-sm: 6px; + --radius-md: 12px; + --shadow-soft: 0 6px 20px rgba(0, 0, 0, 0.07); + --transition: 200ms ease; } html { @@ -16,10 +27,10 @@ body { min-height: 100vh; padding: 0; margin: 0; - font-family: monospace; + font-family: ui-rounded, system-ui, -apple-system, "Segoe UI Rounded", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } -/* CSS for navigation */ +/* navigation */ .navbar { position: -webkit-sticky; @@ -37,8 +48,9 @@ body { background-color: var(--cg-black); color: var(--cg-white); padding: 0px 0px; + background-image: linear-gradient(180deg, var(--cg-white), #fbfdff); + box-shadow: var(--shadow-soft); - /* Debug border */ /* border: solid red; */ } @@ -49,31 +61,34 @@ body { right: 30px; list-style: none; - /* Debug border */ /* border: solid blue; */ } .navbar a { - color: var(--cg-white); + color: var(--cg-blue); font-weight: bold; margin: 0 12px; text-decoration: none; letter-spacing: 2px; font-family: monospace; + transition: color var(--transition), text-decoration-color var(--transition); } .navbar a:hover { - color: var(--cg-blue); + color: var(--cg-lilac); text-decoration: underline; + text-decoration-thickness: 2px; + text-underline-offset: 3px; } .navbar a:active { - color: var(--cg-blue); + color: var(--cg-pink); } .logo a { font-family: Georgia; + letter-spacing: 1px; } .logo a:hover { @@ -86,6 +101,8 @@ main { flex-direction: column; justify-content: center; align-items: center; + max-width: 1200px; + gap: 20px; } .page-title { @@ -93,9 +110,13 @@ main { justify-content: center; font-size: 40px; font-family: Georgia; + background-image: linear-gradient(90deg, var(--cg-blue), var(--cg-pink), var(--cg-lilac)); + -webkit-background-clip: text; + background-clip: text; + color: transparent; } -/* CSS for portfolio grid */ +/* portfolio grid */ .project { display: flex; @@ -103,14 +124,14 @@ main { max-width: 100%; margin: 1em 0 2em 0; - /* Debug border */ /* border: 2px solid blue; */ + gap: 18px; + flex-wrap: wrap; } .item-link { - width: 70%; + width: 68%; - /* Debug border */ /* border: 2px solid red; */ } @@ -121,20 +142,24 @@ main { flex-basis: 50px; flex-grow: 2; - /* Debug border */ - /* border: 2px solid black; */ + /* border:2px solid black; */ + border-radius: var(--radius-md); + box-shadow: var(--shadow-soft); } .project-details { display: flex; - background-color: var(--cg-white); + background: linear-gradient(180deg, #ffffff, #fffefe); width: 30%; height: 500px; flex-shrink: 1; padding: 0 20px; + border-radius: var(--radius-md); + box-shadow: var(--shadow-soft); + border: 1px solid rgba(0,0,0,0.05); margin: 0px; line-height: 1.5; - overflow: scroll; + overflow: auto; flex-direction: column; text-align: center; @@ -149,10 +174,11 @@ main { text-decoration: none; font-weight: bold; letter-spacing: 1px; + transition: color var(--transition), text-decoration-color var(--transition); } .project-details a:hover { - color: var(--cg-blue); + color: var(--cg-pink); text-decoration: underline; } @@ -163,6 +189,7 @@ main { .project-name { font-weight: bold; font-size: 20px; + color: var(--cg-black); } /* CSS for home page */ @@ -172,15 +199,16 @@ main { align-items: center; justify-content: space-between; padding: 20px; - background-color: #f8f8f8; - border: 1px solid #ccc; - border-radius: 5px; + background: linear-gradient(180deg, #ffffff, #fbfbff); + border: 1px solid rgba(0,0,0,0.06); + border-radius: var(--radius-md); + box-shadow: var(--shadow-soft); /* box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); */ } .about-image img { max-width: 300px; - border-radius: 3px; + border-radius: var(--radius-sm); /* box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); */ } @@ -202,24 +230,119 @@ main { /* CSS for resume page */ .button { - background-color: var(--cg-black); + background-image: linear-gradient(180deg, var(--cg-blue), var(--cg-lilac)); border: none; color: var(--cg-white); - - font-family: monospace; - - padding: 5px 7px; + font-family: ui-rounded, system-ui, -apple-system, "Segoe UI Rounded", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + padding: 8px 12px; text-align: center; - - border-radius: 2px; + border-radius: var(--radius-sm); + box-shadow: var(--shadow-soft); + transition: transform var(--transition), box-shadow var(--transition), opacity var(--transition); } .button:hover { - background-color: var(--cg-blue); + opacity: 0.95; + transform: translateY(-1px); } .resume h2 { font-family: Georgia; + color: var(--cg-black); +} + +/* resume layout container */ +.resume { + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + max-width: 800px; + background: linear-gradient(180deg, #ffffff, #fbfbff); + border: 1px solid rgba(0,0,0,0.06); + border-radius: var(--radius-md); + box-shadow: var(--shadow-soft); + padding: 24px 28px; + line-height: 1.5; +} + +/* each section title like Education / Skills / etc */ +.section-title { + font-family: Georgia; + font-size: 20px; + letter-spacing: 0.5px; + color: var(--cg-black); + background-image: linear-gradient(90deg, var(--cg-blue), var(--cg-pink)); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin-top: 24px; + margin-bottom: 12px; +} + +/* one entry block */ +.entry { + background: var(--cg-white); + border: 1px solid rgba(0,0,0,0.05); + border-radius: var(--radius-sm); + box-shadow: var(--shadow-soft); + padding: 12px 16px; + margin-bottom: 16px; +} + +/* job / project / school name */ +.entry-title { + font-weight: bold; + font-size: 16px; + color: var(--cg-black); + margin: 0 0 4px 0; + font-family: ui-rounded, system-ui, -apple-system, "Segoe UI Rounded", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + letter-spacing: 0.3px; +} + +/* dates, role, location line */ +.entry-info { + font-size: 14px; + color: #555; + margin: 0 0 8px 0; + font-family: monospace; + letter-spacing: 0.5px; +} + +/* description paragraph */ +.entry-description { + font-size: 14px; + color: var(--cg-black); + margin: 0; + line-height: 1.45; +} + +/* lists for coursework / skills */ +.course-list, +.skill-list { + list-style-type: square; + padding-left: 20px; + margin: 8px 0 0 0; + column-gap: 24px; + column-count: 2; + font-size: 14px; + color: var(--cg-black); + line-height: 1.4; +} + +.course-list li, +.skill-list li { + margin-bottom: 6px; +} + +/* position resume nicely on page */ +main.resume-page-wrapper { + width: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + padding-top: 20px; + padding-bottom: 80px; } /* CSS for contact form */ @@ -229,6 +352,7 @@ label { margin-bottom: 8px; font-family: Georgia; font-weight: bold; + color: var(--cg-black); } input[type="text"], @@ -237,15 +361,27 @@ textarea { width: 100%; padding: 10px; margin-bottom: 15px; - border: 1px solid #ccc; - border-radius: 4px; + border: 1px solid rgba(0,0,0,0.12); + border-radius: var(--radius-sm); + box-shadow: 0 1px 0 rgba(0,0,0,0.02) inset; font-size: 16px; resize: none; + transition: border-color var(--transition), box-shadow var(--transition); +} + +/* focus states */ +input[type="text"]:focus, +input[type="email"]:focus, +textarea:focus { + outline: none; + border-color: var(--cg-blue); + box-shadow: 0 0 0 4px color-mix(in oklab, var(--cg-blue) 30%, transparent); } /* Add some spacing to the form */ form { width: 500px; + max-width: 92vw; margin: 0 auto; } @@ -255,10 +391,11 @@ form { display: flex; justify-content: center; align-items: center; - background-color: var(--cg-black); - color: var(--cg-white); + background-image: linear-gradient(180deg, var(--cg-lilac), var(--cg-pink)); + color: #2a2d2d; position: absolute; bottom: 0; width: 100%; height: 2.5rem; + box-shadow: 0 -6px 16px rgba(0,0,0,0.06); } \ No newline at end of file From 2fbdeb5928b323f29882312bd4d42061b5b6e75b Mon Sep 17 00:00:00 2001 From: Jacqueline B Date: Thu, 30 Oct 2025 22:12:50 -0700 Subject: [PATCH 4/5] test --- blogs/learning-typescript.html | 0 blogs/my-first-blog-post.html | 0 blogs/post.html | 32 +++++++++++++++++++++++++ blogs/post.js | 14 +++++++++++ images/tennisbird.webp | Bin 0 -> 29540 bytes src/blog.js | 42 +++++++++++++++++++++++---------- 6 files changed, 75 insertions(+), 13 deletions(-) delete mode 100644 blogs/learning-typescript.html delete mode 100644 blogs/my-first-blog-post.html create mode 100644 blogs/post.html create mode 100644 blogs/post.js create mode 100644 images/tennisbird.webp diff --git a/blogs/learning-typescript.html b/blogs/learning-typescript.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/blogs/my-first-blog-post.html b/blogs/my-first-blog-post.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/blogs/post.html b/blogs/post.html new file mode 100644 index 000000000..3215809a1 --- /dev/null +++ b/blogs/post.html @@ -0,0 +1,32 @@ + + + + Blog Post + + + + + + + +
+

+ + +

+
+ +
+ © 2025 My Personal Website | All Rights Reserved +
+ + \ No newline at end of file diff --git a/blogs/post.js b/blogs/post.js new file mode 100644 index 000000000..f67aa0c2e --- /dev/null +++ b/blogs/post.js @@ -0,0 +1,14 @@ +const params = new URLSearchParams(window.location.search); +const slug = params.get("slug"); + +const blog = blogs.find(b => b.slug === slug); + + document.getElementById("post-title").textContent = blog.title; + document.getElementById("post-page-title").textContent = blog.title; + document.getElementById("post-date").textContent = blog.date; + + const img = document.getElementById("post-image"); + img.src = blog.image; + img.alt = blog.imageAlt; + + document.getElementById("post-content").textContent = blog.description; diff --git a/images/tennisbird.webp b/images/tennisbird.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b4a3e5e276efbb2e1fda1c6315206f422736e9e GIT binary patch literal 29540 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\n

").concat(blog.title, "

\n

").concat(blog.date, "

\n \"").concat(blog.imageAlt,\n

").concat(blog.description, "

\n \n "); - container.appendChild(div); - }); + blogs.forEach(function (blog) { + var div = document.createElement('div'); + div.className = 'blog-card'; + div.innerHTML = ` + +

${blog.title}

+

${blog.date}

+ ${blog.imageAlt} +
+ `; + container.appendChild(div); + }); } -}); + }); \ No newline at end of file From 58eb2c6d58493e145f1a218bad35898c53a56775 Mon Sep 17 00:00:00 2001 From: Jacqueline B Date: Thu, 30 Oct 2025 23:03:00 -0700 Subject: [PATCH 5/5] made extra changes to blog.ts and js so that they work together better --- src/blog.js | 86 ++++++++++++++++++++++++++--------------------------- src/blog.ts | 52 +++++++++++++++++++------------- 2 files changed, 75 insertions(+), 63 deletions(-) diff --git a/src/blog.js b/src/blog.js index 8bb1e8d16..8b8ce0eb3 100644 --- a/src/blog.js +++ b/src/blog.js @@ -1,45 +1,45 @@ -var blogs = [ - { - title: "My First Blog Post", - date: "2025-10-28", - description: "This is my first blog post where I talk about blog stuff!", - image: "./images/tennisbird.webp", - imageAlt: "Tennis bird", - slug: "my-first-blog-post" - }, - { - title: "My Second Blog Post", - date: "2025-10-27", - description: "This is my second blog post where I talk about more blog stuff", - image: "./images/learning-ts.png", - imageAlt: "second image", - slug: "learning-typescript" - }, - { - title: "My Third Blog Post", - date: "2025-10-27", - description: "This is my third blog post where I talk about more blog stuff", - image: "./images/learning-ts.png", - imageAlt: "third image", - slug: "learning-typescript" - - } +const blogs = [ + { + title: "My First Blog Post", + date: "2025-10-28", + description: "This is my first blog post where I talk about blog stuff!", + image: "./images/tennisbird.webp", + imageAlt: "Tennis bird", + slug: "my-first-blog-post", + }, + { + title: "My Second Blog Post", + date: "2025-10-27", + description: "This is my second blog post where I talk about more blog stuff", + image: "./images/learning-ts.png", + imageAlt: "second image", + slug: "learning-typescript", + }, + { + title: "My Third Blog Post", + date: "2025-10-27", + description: "This is my third blog post where I talk about more blog stuff", + image: "./images/learning-ts.png", + imageAlt: "third image", + slug: "learning-typescript", + }, ]; -document.addEventListener('DOMContentLoaded', function () { - var container = document.getElementById('blog-container'); - if (container) { - blogs.forEach(function (blog) { - var div = document.createElement('div'); - div.className = 'blog-card'; - div.innerHTML = ` - -

${blog.title}

-

${blog.date}

- ${blog.imageAlt} -
- `; - container.appendChild(div); - }); - } - }); \ No newline at end of file +document.addEventListener("DOMContentLoaded", () => { + const container = document.getElementById("blog-container"); + + if (container) { + blogs.forEach((blog) => { + const div = document.createElement("div"); + div.className = "blog-card"; + div.innerHTML = ` + +

${blog.title}

+

${blog.date}

+ ${blog.imageAlt} +
+ `; + container.appendChild(div); + }); + } +}); \ No newline at end of file diff --git a/src/blog.ts b/src/blog.ts index e9adce515..a9f65b879 100644 --- a/src/blog.ts +++ b/src/blog.ts @@ -1,44 +1,56 @@ +// Define the shape of a blog post type Blog = { title: string; date: string; description: string; - image: string; + image: string; imageAlt: string; slug: string; }; +// Blog data const blogs: Blog[] = [ { title: "My First Blog Post", date: "2025-10-28", - description: "This is my first blog post where I share what I learned starting the bootcamp.", - image: "./images/first-post.png", - imageAlt: "Screenshot of my first blog project", - slug: "my-first-blog-post" + description: "This is my first blog post where I talk about blog stuff!", + image: "./images/tennisbird.webp", + imageAlt: "Tennis bird", + slug: "my-first-blog-post", }, { - title: "Learning TypeScript", + title: "My Second Blog Post", date: "2025-10-27", - description: "A quick overview of how TypeScript makes JavaScript safer and easier to maintain.", + description: "This is my second blog post where I talk about more blog stuff", image: "./images/learning-ts.png", - imageAlt: "TypeScript logo and code snippet", - slug: "learning-typescript" - } + imageAlt: "second image", + slug: "learning-typescript", + }, + { + title: "My Third Blog Post", + date: "2025-10-27", + description: "This is my third blog post where I talk about more blog stuff", + image: "./images/learning-ts.png", + imageAlt: "third image", + slug: "learning-typescript", + }, ]; -document.addEventListener('DOMContentLoaded', () => { // safety measure - const container = document.getElementById('blog-container'); +// On load, populate the blog list ONLY if we're on blog.html +// (post.html won't have #blog-container, so this won't run there) +document.addEventListener("DOMContentLoaded", () => { + const container = document.getElementById("blog-container"); + if (container) { blogs.forEach((blog) => { - const div = document.createElement('div'); - div.className = 'blog-card'; + const div = document.createElement("div"); + div.className = "blog-card"; div.innerHTML = ` - -

${blog.title}

-

${blog.date}

- ${blog.imageAlt} -

${blog.description}

-
+ +

${blog.title}

+

${blog.date}

+ ${blog.imageAlt} +
`; container.appendChild(div); });