Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
73cfc7b
added html file, css file and photo folder
Sep 1, 2025
58fed4f
Added some basic structure in html file
Sep 1, 2025
7858e20
added initial grid layout
Sep 1, 2025
598c99a
Worked with layout using grid
Sep 1, 2025
daa0960
worked with grid and flexbox
Sep 2, 2025
402ae73
Redid html structure, commented out old css and started from scratch …
Sep 3, 2025
e643b29
worked on making the website responsive
Sep 3, 2025
a994b8a
worked on layout
Sep 4, 2025
1567a6a
made photos look like polaroids, added navigation bar
Nicolinabl Sep 4, 2025
1bc6754
Update README.md
Nicolinabl Sep 4, 2025
8d7daa9
test
Nicolinabl Sep 4, 2025
d586c4a
test
Nicolinabl Sep 4, 2025
d4a68f0
added some hover effects on the polaroids
Nicolinabl Sep 5, 2025
b3bdc4f
small tweaks on media querie
Nicolinabl Sep 5, 2025
2e112fd
tweaks with media queries
Nicolinabl Sep 5, 2025
121c3ec
minor tweaks
Nicolinabl Sep 5, 2025
a1575fb
Changed media queries on grid, moved part of grid and made into flexbox
Nicolinabl Sep 6, 2025
e7d3a47
changed font size
Nicolinabl Sep 6, 2025
5300233
Added basic structure an input types for form
Nicolinabl Sep 9, 2025
8ea19d2
worked on form, added hero image, played around with styling and colors
Nicolinabl Sep 9, 2025
4fbcc9e
changed colors and hero image
Nicolinabl Sep 10, 2025
968f4fd
Added radio buttons on form, made form responsive, changed some of th…
Nicolinabl Sep 12, 2025
2cb848b
added hamburger menu
Nicolinabl Sep 16, 2025
a504751
worked on styling
Nicolinabl Sep 16, 2025
c2a0ad6
Added party mode toggle with javascript, changed hamburger menu, adde…
Nicolinabl Sep 18, 2025
8419fb9
added more javaScript to add on to party mode
Nicolinabl Sep 18, 2025
6a36865
Made hamburger nav menu close when link is clicked
Nicolinabl Sep 19, 2025
79a31af
added text to readme, made links smaller, added margin to main sectio…
Nicolinabl Sep 19, 2025
e6355f9
small changes after code review, delet3ed code not in use that was co…
Nicolinabl Sep 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5502
}
48 changes: 47 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,47 @@
# js-project-business-site
# js-project-business-site

# Business site - Willz models
https://willz-models.netlify.app/

This website is my contribution to Technigo bootcamps assignment: project business site. The goal was to explore responsive design, interactivity, and layout techniques. The aim for me while building this was to learn as much as possible while playing around and having fun with the code. Therefor I chose to make a dummy model agency site featuring my family cat Willz. My goal was to make the website look professional but with fun content. The site combines professional design elements with playful, interactive features, making it both visually appealing and enjoyable to explore.

## Features
* Responsive Design: Optimized for desktop, tablet, and mobile devices.

* Navigation: Full navigation bar for desktop, Hamburger menu on smaller screens with interactive DOM functionality

* Interactive Theme: “Party Mode” button changes the site’s color scheme and vibe using JavaScript.

* Layout: Created using grid and flexbox

* Booking Form: Includes multiple input types with POST submission to httpbin.org

## Technologies used
* HTML – Semantic structure and accessibility

* CSS – Styling with Flexbox and CSS Grid for responsive layouts

* JavaScript – Interactive hamburger menu and dynamic theme toggle

## Project requirements met
* Fully responsive across all viewport sizes (320px–1600px)

* Responsive navigation bar and layout using Flexbox and Grid

* Responsive header with hero image/video

* Interactive form with multiple input types and POST submission

* Hamburger menu on smaller screens, functional using javaScript

* Successfully deployed on Netlify

## Learning Outcomes

* Practiced responsive design techniques across devices

* Implemented interactive features using JavaScript

* Experimented with theme toggling and playful UI

* Gained experience combining CSS Grid and Flexbox for complex layouts
Binary file added images/.DS_Store
Binary file not shown.
Binary file added images/Willz-catwalk.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/Willz-fancy.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/blue-paint.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/disco.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/golden-party.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-artsy.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-cowboy.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-dreaming.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-dress.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-glasses.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-jacket.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-kpop.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-manicure.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-nature.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-potato.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-princess.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-royal.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/willz-zara.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
289 changes: 289 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
>
<title>Willz agency</title>
<link
rel="stylesheet"
href="style.css"
/>
<link
rel="preconnect"
href="https://fonts.googleapis.com"
>
<link
rel="preconnect"
href="https://fonts.gstatic.com"
crossorigin
>
<link
href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Open+Sans:ital,wght@0,300..800;1,300..800&family=Sansation:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap"
rel="stylesheet"
>
</head>

<body id="fullBody">
<!---NAVBAR DESKTOP------------->
<ul
id="desktopNav"
class="nav-list"
>
<li><a href="#homePage">Home </a></li>
<li><a href="#modelSection">Models </a></li>
<li><a href="#information">About us </a></li>
<li><a href="#formSection">Contact </a></li>
Comment on lines +36 to +39
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remember indentation


<button
id="partyMode"
class="partyButton"
>Party mode</button>
</ul>

<!---HAMBURGER MENU-->
<div
class="hamburger"
onclick="hamburgerFunction(this)"
>
<div class="barOne"></div>
<div class="barTwo"></div>
<div class="barThree"></div>
</div>

<nav class="hamburgerLinks">
<ul>
<span class="hamburgerLinkSpan">
<li
onclick="closeHamburger()"
class="hamburgerList"
><a href="#homePage">Home</li></a>
</span>
<span class="hamburgerLinkSpan">
<li
onclick="closeHamburger()"
class="hamburgerList"
><a href="#modelSection">Models</li></a>
</span>
<span class="hamburgerLinkSpan">
<li
onclick="closeHamburger()"
class="hamburgerList"
><a href="#information">About us</li></a>
</span>
<span class="hamburgerLinkSpan">
<li
onclick="closeHamburger()"
class="hamburgerList"
><a href="#formSection">Contact</li></a>
</span>
<span class="hamburgerButtonSpan"><button
onclick="partyCloseHamburger()"
id="partyModeHamburger"
class="partyButton"
>Party mode</button></span>
</ul>
</nav>

<!---HERO SECTION-->
<header
id="homePage"
class="hero"
>
<div class="header-text">
<h1 id="heroText">WILLZ MODELS</h1>
<p class="header-paragraph">A one cat model agency</p>
</div>
</header>

<!----MAIN section--------->
<section
id="modelSection"
class="main-section"
>
<div class="card 1">
<img src="images/willz-zara.jpeg" />
<h3>Fashionable</h3>
</div>

<div class="card 2">
<img src="images/Willz-fancy.jpeg" />
<h3>Sofisticated</h3>
</div>

<div class="card 3">
<img src="images/willz-cowboy.jpeg" />
<h3>casual</h3>
</div>

<div class="card 4">
<img src="images/Willz-catwalk.jpeg" />
<h3>professional</h3>
</div>

<div class="card 5">
<img src="images/willz-royal.jpeg" />
<h3>Royal</h3>
</div>

<div class="card 6">
<img src="images/willz-potato.jpeg" />
<h3>stoic</h3>
</div>

<div class="card 7">
<img src="images/willz-kpop.jpeg" />
<h3>Modern</h3>
</div>

<div class="card 8">
<img src="images/willz-jacket.jpeg" />
<h3>Focused</h3>
</div>

<div class="card 9">
<img src="images/willz-princess.jpeg" />
<h3>Feminine</h3>
</div>

<div class="card 10">
<img src="images/willz-artsy.jpeg" />
<h3>Artistic</h3>
</div>

<div class="card 11">
<img src="images/willz-manicure.jpeg" />
<h3>Well groomed</h3>
</div>

<div class="card 12">
<img src="images/willz-nature.jpeg" />
<h3>Natural</h3>
</div>
</section>


<!--INFO + FORM section------->

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

igen bra kommentar !!

<section
id="information"
class="info-section"
>
<div class="info-text">
<h2>ABOUT US</h2>
<img
class="infoImage"
src="images/willz-dreaming.png"
alt="cat"
>
<p>Forget about casting calls, multiple models, or diva drama. Willz is the one-cat wonder your brand
has been dreaming of. From slick fashion to casual cool, Willz can pull off any look, any pose and any vibe. All
without a single hiss. Professional Purr-fectionist: Takes direction better than most humans. Multi-Look expert:
From well dressed sofisticated looks to natural vibes, Willz does it all. Flexible & Focused: Stretches, yawns,
or stares
dramatically, all on cue. Why hire a dozen models when Willz has mastered it all? Book a shoot and let this
feline phenomenon turn you project into a paw-some masterpiece.</p>
</div>

<div
id="formSection"
class="form-section"
>
<form
action="https://httpbin.org/anything"
method="post"
>
<div class="formHeading">
<h3>Request a booking with willz</h3>
</div>
<fieldset>
<label>
<span class="customer-name">Name</span>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

här används span - är nyfiken över det, själv använde jag label och lade namnet i den, hade varit kul att veta hur det funkat med span och om det blir någon skillnad beroende på vilken man använder :)

<input
type="text"
name="name"
placeholder="Your name"
required

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snyggt jobbat med att lägga in ”required” på formuläret, är mer realistiskt då!

>
</label>

<label>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ser lite ut som att du använder label lite som en div, hur har det funkat? hade varit intressant att veta hur det påverkar hur man exempelvis stylar koden sen :)

<span class="customer-email">Email</span>
<input
type="email"
name="email"
placeholder="[email protected]"
required
>
</label>

<label>
<span class="version-willz">Type of booking</span>
<select
name="willz-version"
id="willz-version"
required
>
<option
value="booking type"
selected
disabled
>Choose type of booking</option>
<option value="Photo shoot">Photo shoot</option>
<option value="Catwalk">Catwalk</option>
<option value="Live performance">Live performance</option>
</select>
</label>

<label>
<span class="requested-date">Requested date</span>
<input
type="date"
name="day"
id="day"
required
>
</label>
Comment on lines +240 to +248

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coolt med datum rutan, visste inte hur man gjorde det.


<div class="radiobutton-row">
<label class="radiobutton-container">Full day
<input
type="radio"
name="time"
value="Full day"
>
<span class="custom-radiobutton"></span>
</label>
<label class="radiobutton-container">Half day
<input
type="radio"
name="time"
value="Half day"
>
<span class="custom-radiobutton"></span>
</label>
</div>
<div class="button-box">
<button
id="submit-button"
class="submit-button"
type="submit"
>Submit</button>
</div>
</fieldset>
</form>
</div>

</section>

<!---FOOTER----------->
<footer>
<p>Created by: Nicolina Bäcklin Löwenberg</p>
</footer>

<script src="script.js"></script>
</body>

</html>
52 changes: 52 additions & 0 deletions script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
const hamburgerLinks = document.querySelector(".hamburgerLinks")
const hamburgerBtn = document.querySelector(".hamburger")

function hamburgerFunction(x) {
x.classList.toggle("change")
hamburgerLinks.classList.toggle("open")
}

const btn = document.getElementById("partyMode")
const modelSection = document.getElementById("modelSection")
const desktopNav = document.getElementById("desktopNav")
const heroText = document.getElementById("heroText")
const btnHamburger = document.getElementById("partyModeHamburger")
const fullBody = document.getElementById("fullBody")

btn.onclick = () => {
modelSection.classList.toggle("party")
desktopNav.classList.toggle("partyNav")
heroText.classList.toggle("partyText")
fullBody.classList.toggle("partyBody")
}

btnHamburger.onclick = () => {
modelSection.classList.toggle("party")
desktopNav.classList.toggle("partyNav")
heroText.classList.toggle("partyText")
fullBody.classList.toggle("partyBody")
closeHamburger()
}

function closeHamburger() {
hamburgerLinks.classList.remove("open")
hamburgerBtn.classList.remove("change")
}


















Loading