Compare commits

..

5 Commits

Author SHA1 Message Date
cabbbyy
4df6c5b740 added css 2025-08-11 16:02:08 +08:00
cabbbyy
de8380b115 added js 2025-08-11 16:01:58 +08:00
cabbbyy
27f40ce999 added main page 2025-08-11 16:01:33 +08:00
cabbbyy
65e1322918 added images 2025-08-11 16:01:19 +08:00
cabbbyy
be7fb5699b added favicon 2025-08-11 16:01:03 +08:00
42 changed files with 499 additions and 0 deletions

6
favicon/about.txt Normal file
View File

@@ -0,0 +1,6 @@
This favicon was generated using the following graphics from Twitter Twemoji:
- Graphics Title: 1f5fa.svg
- Graphics Author: Copyright 2020 Twitter, Inc and other contributors (https://github.com/twitter/twemoji)
- Graphics Source: https://github.com/twitter/twemoji/blob/master/assets/svg/1f5fa.svg
- Graphics License: CC-BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
favicon/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 B

BIN
favicon/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
favicon/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
favicon/favicon_io.zip Normal file

Binary file not shown.

1
favicon/site.webmanifest Normal file
View File

@@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

BIN
images/626.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
images/chang.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 KiB

BIN
images/clayDate.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
images/deftones.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

BIN
images/dolores.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

BIN
images/fineArts.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

BIN
images/highland.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
images/home.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

BIN
images/homeroom.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
images/innout.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

BIN
images/jit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
images/kbbq.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

BIN
images/kevin.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
images/mulberry.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
images/mysterySpot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
images/pacificBeach.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
images/pacifica.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

BIN
images/pfp.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

BIN
images/pokehouse1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
images/pokehouse2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
images/primeRib.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
images/raavi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

BIN
images/rattleship.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
images/rockGarden.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
images/roxa.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
images/seafood.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
images/snoopy.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
images/squiggle.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

52
index.html Normal file
View File

@@ -0,0 +1,52 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Myatt Map</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Meta Info -->
<meta name="description" content="Myatt Map Manuscript">
<meta property="og:title" content="Myatt Map">
<meta property="og:description" content="Myatt Map Manuscript">
<meta property="og:url" content="https://map.rchou.org">
<meta property="og:type" content="website">
<meta property="og:image" content="https://maps.rchou.org/images/pfp.jpg">
<!-- Map -->
<link
href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css"
rel="stylesheet"
/>
<!-- Favicon -->
<link rel="stylesheet" href="style.css" />
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
<link rel="manifest" href="./favicon/site.webmanifest">
<!-- Font -->
<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=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
</head>
<body>
<!-- Map -->
<div id="map"></div>
<!-- Lightbox overlay -->
<div id="overlay">
<img id="overlay-img" alt="Expanded view">
</div>
<!-- Legend -->
<div id="legend">
<h4 id="legend-header">Legend</h4>
<div><span class="legend-color" style="background:red"></span> Places</div>
<div><span class="legend-color" style="background:#FF8DA1"></span> Activites</div>
<div><span class="legend-color" style="background:#000080"></span> Restaurants</div>
</div>
<script src="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js"></script>
<script src="pins.js"></script>
<script src="script.js"></script>
</body>
</html>

237
pins.js Normal file
View File

@@ -0,0 +1,237 @@
// pins.js
// Array of pin objects for your SF dates map
const pins = [
{
loc: "37.79812, -122.23806",
title: "Home Sweet Home",
image: "images/home.jpg",
caption: "I farded in this room 13 times",
category: "place",
linkUrl: "https://maps.app.goo.gl/WAWswkbUAB79Thvc7",
},
{
loc: "37.78531, -122.21403",
title: "Allergy Central",
image: "images/jit.jpg",
caption: "Because of this jit.",
color: "red",
category: "place",
linkUrl: "https://maps.app.goo.gl/WAWswkbUAB79Thvc7",
},
{
loc: "37.825134008344946, -122.23262517791034",
title: "Mulberry's Market",
image: "images/mulberry.jpg",
caption: "We had sandwiches here ! I can't believe you went to school around here. You NOT from oakland fr. </3",
color: "#000080",
category: "food",
linkUrl: "https://maps.app.goo.gl/WAWswkbUAB79Thvc7",
},
{
loc: "37.77964136046781, -122.41720438812168",
title: "Skrillex & Fred Again",
image: "images/skrillexFredAgain.jpg",
caption: "Oops lol",
linkUrl: "https://www.youtube.com/watch?v=yRxbIISmJws",
},
{
loc: "37.802132616179186, -122.4472817450568",
title: "Palace of Fine Arts",
image: "images/fineArts.jpg",
caption: "📸 Diesel",
color: "#FF8DA1",
category: "event",
linkUrl: "https://maps.app.goo.gl/ZgRzjatg85gQuAV56",
},
{
loc: "38.46035670740163, -122.7358885716845",
title: "Snoopy Museum",
image: "images/snoopy.jpg",
caption: "MY comic strip was better.",
color: "#FF8DA1",
category: "event",
linkUrl: "https://maps.app.goo.gl/ciTBmYDBs4TdUYHD9",
},
{
loc: "37.79349386628708, -122.42262473198608",
title: "House of Prime Rib",
image: "images/primeRib.jpg",
caption: "Spent too damn long arranging everything. I was hungry.",
color: "#000080",
category: "food",
linkUrl: "https://maps.app.goo.gl/L758kLV9sAArDiMx5",
},
{
loc: "37.796189680437244, -122.40457276773799",
title: "Raavi North Indian Cuisine",
image: "images/raavi.jpg",
caption: "I'm sorry I don't make the rules I had to include the best restaurant in SF.",
color: "#000080",
category: "food",
linkUrl: "https://maps.app.goo.gl/jxuT6PJiTsDJp5uB8",
},
{
loc: "37.78386940573387, -122.27709398034689",
title: "Alameda In-N-Out",
image: "images/innout.jpg",
caption: "There's a Green Glass Door and some things can go through it, while others can't. A kitten can go through, but not a cat. Cabbert can, but Cab can't.",
color: "#000080",
category: "food",
linkUrl: "https://maps.app.goo.gl/3uPkveWBML4ufELq8",
},
{
loc: "37.76841042686498, -122.49221963597563",
title: "Deftones",
image: "images/deftones.jpg",
caption: "I watched you change <br> Into a fly <br> I looked away <br> You were on fire",
color: "#FF8DA1",
category: "event",
linkUrl: "https://maps.app.goo.gl/KLT6rEGGzahgy4gD6",
},
{
loc: "37.568288998813024, -122.51640440420968",
title: "Devil's Bunker",
image: "images/pacifica.jpg",
caption: "Remember we ran into those fuck ass Ken Carson kids",
color: "#FF8DA1",
category: "event",
linkUrl: "https://maps.app.goo.gl/kmuHH7HX4WsTjdvh6",
},
{
loc: "37.650244488927406, -122.49415916784577",
title: "Clay Date",
image: "images/clayDate.jpg",
caption: "Cold asl. And you had to pee infront of everyone.",
category: "event",
linkUrl: "https://maps.app.goo.gl/B3DzTyAWD3eExCRg9",
},
{
loc: "37.45540477568465, -121.90997600357476",
title: "Highland Noodles",
image: "images/highland.jpg",
caption: "We had hand pulled noodles here w eric. You dropped everything into your soup.",
category: "food",
linkUrl: "https://maps.app.goo.gl/T6Mzf3E34AVbg65U6",
},
{
loc: "37.429625188529066, -121.9198108138374",
title: "Cajun Crack'n",
image: "images/seafood.jpg",
caption: "You dropped your septum ball...",
category: "food",
linkUrl: "https://maps.app.goo.gl/KbR4mcppTXz3ZsYn8",
},
{
loc: "37.40469809134176, -122.004136356191",
title: "Fake 408",
image: "images/kevin.jpg",
caption: "Big Brother is watching...",
category: "place",
linkUrl: "https://maps.app.goo.gl/3RyKo8e5VH4FrM258",
},
{
loc: "37.773553055069826, -122.2991278811046",
title: "Rattleship",
image: "images/rattleship.jpg",
caption: "Year 2 :p",
category: "event",
linkUrl: "https://maps.app.goo.gl/Vy4645FUAL1vhqKx7",
},
{
loc: "37.66025039958257, -121.89301698343981",
title: "626 Night Market",
image: "images/626.jpg",
caption: "RIP Kace Tea",
category: "event",
linkUrl: "https://maps.app.goo.gl/eFr1gwK36Jqv3RXW9",
},
{
loc: "36.99318522925177, -122.0651604153732",
title: "Squiggle",
image: "images/squiggle.jpg",
caption: "You just don't get it. It's so iconic.",
category: "place",
linkUrl: "https://maps.app.goo.gl/YDVMdWEtvcyovssn9",
},
{
loc: "37.00107153727743, -122.04947749033317",
title: "Rock Garden",
image: "images/rockGarden.jpg",
caption: "Here lies a bajillion notes about you. (Good things I hope)",
category: "event",
linkUrl: "https://maps.app.goo.gl/J8cfNmbGUarVA6wJ6",
},
{
loc: "36.97472208111632, -122.02588344088629",
title: "Roxa Hammock Cafe",
image: "images/roxa.jpg",
caption: "Hangin' Around",
category: "event",
linkUrl: "https://maps.app.goo.gl/oz6fyP78onSKz6Lz7",
},
{
loc: "37.01723296018626, -122.00308735579674",
title: "The Mystery Spot",
image: "images/mysterySpot.jpg",
caption: "ts hella mysterious. they should make it a spot lwk",
category: "event",
linkUrl: "https://maps.app.goo.gl/YDVMdWEtvcyovssn9",
},
{
loc: "32.79417952028997, -117.25624817424023",
title: "Pacific Beach",
image: "images/pacificBeach.jpg",
caption: "I loved this trip. I can't believe tvm died. This was the first time you met pants and bridget I think. FAV wlw couple <3",
category: "event",
linkUrl: "https://maps.app.goo.gl/24kMSfergfD5Z37PA",
},
{
loc: "32.79417952028997, -117.25624817424023",
title: "Pacific Beach",
image: "images/pacificBeach.jpg",
caption: "I loved this trip. I can't believe tvm died. This was the first time you met pants and bridget I think. FAV wlw couple <3",
category: "event",
linkUrl: "https://maps.app.goo.gl/24kMSfergfD5Z37PA",
},
{
loc: "37.8089283, -122.254987",
title: "Jong Ga House",
image: "images/kbbq.jpg",
caption: "Happy Birthday Jay!! I wasn't being shy I was just placed in the kids corner.",
category: "food",
linkUrl: "https://maps.app.goo.gl/EyNQXGTgXRbkH8JP7",
},
{
loc: "37.828595796191436, -122.25995063398888",
title: "Homeroom",
image: "images/homeroom.jpg",
caption: "You were right it was chilly, I should have gotten my jacket earlier.",
category: "food",
linkUrl: "https://maps.app.goo.gl/D8b3qN6h3GCLtfQR7",
},
{
loc: "37.75634544110794, -122.2512607733922",
title: "Poke House, Alameda",
image: "images/pokehouse2.jpg",
caption: "They don't know it yet but I'm going to be their best employee.",
category: "food",
linkUrl: "https://maps.app.goo.gl/osAUxGQTvXsqXx8G8",
},
{
loc: "37.3011156776227, -121.94936726198388",
title: "Poke House, Winchester",
image: "images/pokehouse1.jpg",
caption: "I've met so many of your friends here for da first time. Poke Home <3",
category: "food",
linkUrl: "https://maps.app.goo.gl/SkpZGVzyP7Q9ZWuL8",
},
{
loc: "37.2793403038145, -121.98624235157209",
title: "Chang Household",
image: "images/chang.jpg",
caption: "kkimothyy and ii.conniechiwa",
category: "place",
linkUrl: "https://www.instagram.com/kkimothyy",
},
];

94
script.js Normal file
View File

@@ -0,0 +1,94 @@
// your Mapbox access token
mapboxgl.accessToken = 'pk.eyJ1IjoiY2FiYmJ5eSIsImEiOiJjbWRpYzY1MGgwYzA5Mm1xM25udDUzbGtpIn0.RX6zv4VI6r2vpj7IWidz0w';
// mobile stuffs
const isMobile = window.innerWidth <= 600;
const mobileMaxPx = Math.floor(window.innerWidth * 0.65);
const desktopMax = '240px';
// Colors
const Config = {
colors: {
place: '#FF0000', // red
event: '#FF8DA1', // pink
food: '#000080', // navy blue
default: '#000000' // fallback black
}
};
// 1. Initialize the map
const map = new mapboxgl.Map({
container: 'map', // ID of the <div> in index.html
projection: 'globe',
style: 'mapbox://styles/mapbox/streets-v12',
center: [-122.3194, 37.7849], // SF [lng, lat]
zoom: 11,
attributionControl: false // completely removes the attribution control
});
map.addControl(new mapboxgl.NavigationControl()); // Nav controls
// 2. Total Pins
const header = document.getElementById('legend-header');
header.textContent = `Total pins: ${pins.length}`;
// 3. Loop through your pins array and add markers+popups
pins.forEach(pin => {
const [latStr, lngStr] = pin.loc.split(',').map(s => s.trim());
const lat = parseFloat(latStr);
const lng = parseFloat(lngStr);
// offset is how far the popup appears above/below the pin
const popup = new mapboxgl.Popup({
offset: {
// when the popup is above the marker, push it up by 25px (nice spacing)
top: [0, 10],
// when its below the marker, only push it down by 8px (tighter)
bottom: [0, -40],
// for the corners
'top-left': [15, 25],
'top-right': [-15, 25],
'bottom-left': [25, 20],
'bottom-right': [-25, 20]
},
// close button is intuitive
closeButton: false,
// mobile stuffs
maxWidth: isMobile
? `${mobileMaxPx}px` // ~85% of the true device width
: '240px' // your normal desktop width
}).setHTML(`
<img
loading="lazy"
src="${pin.image}"
alt="${pin.title}"
>
<h3>
<a href="${pin.linkUrl}" target="_blank"> ${pin.title} </a>
</h3>
<p>${pin.caption}</p>
`);
new mapboxgl.Marker({ scale: 0.75, color: Config.colors[pin.category] || Config.colors.default })
.setLngLat([lng, lat])
.setPopup(popup)
.addTo(map);
});
// 4 To show big picture.
const overlay = document.getElementById('overlay');
const overlayImg = document.getElementById('overlay-img');
document.addEventListener('click', e => {
// if user clicked *inside* a popup on its <img>
if (e.target.matches('.mapboxgl-popup-content img')) {
overlayImg.src = e.target.src; // copy the clicked image
overlay.classList.add('show'); // show the overlay
}
});
overlay.addEventListener('click', e => {
if (e.target === overlay) {
overlay.classList.remove('show');
}
});

109
style.css Normal file
View File

@@ -0,0 +1,109 @@
.mapboxgl-ctrl-logo { display: none !important; }
html, body, #map {
height: 100%;
margin: 0;
padding: 0;
font-family: 'Open Sans', sans-serif;
}
/* Semitransparent popup background */
.mapboxgl-popup-content {
background: rgba(0, 0, 0, 0.1) !important;
backdrop-filter: blur(4px);
border-radius: 10px !important; /* ← rounded corners */
filter: drop-shadow(0 0 1px gray) !important; /* <- gives a border */
}
/* For the p inside the popup */
.mapboxgl-popup-content p {
margin: 0 0 -5px 0 !important; /* top/right/bottom/left adjust bottom as you like */
}
.mapboxgl-popup-content h3 {
margin: 0 0 5px 0 !important; /* top/right/bottom/left adjust bottom as you like */
}
/* For the image inside the popup */
.mapboxgl-popup-content img {
border-radius: 5px !important; /* ← rounded corners */
filter: drop-shadow(0 0 1px gray) !important; /* <- gives a border */
width: 100%; /* fill the popups width */
max-width: none; /* ignore any mapbox defaults */
height: auto; /* maintain aspect ratio */
}
/* hide the popup tip/arrow */
.mapboxgl-popup-tip {
display: none;
}
/* Legend box */
#legend {
/* location */
position: absolute;
top: 10px;
left: 10px;
padding: 8px 12px;
border-radius: 6px;
z-index: 1; /* above the map */
/* styling */
background: rgba(0, 0, 0, 0.1);
backdrop-filter: blur(4px);
filter: drop-shadow(0 0 1px gray) !important; /* <- gives a border */
/* content */
font-family: sans-serif;
font-size: 14px;
line-height: 1.4;
}
#legend h4 {
margin: 0 0 0 0;
font-size: 16px;
}
#legend p {
margin: 5px 0 0 0;
}
.legend-color {
display: inline-block;
width: 12px;
height: 12px;
margin-right: 6px;
vertical-align: middle;
border: 1px solid #999;
}
/* Big Picture */
/* fullscreen, centered, hidden by default */
#overlay {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background: rgba(0, 0, 0, 0.75); /* <- dim the background */
backdrop-filter: blur(4px); /* <- blur the background */
filter: drop-shadow(0 0 4px gray) !important; /* <- gives a border */
display: none;
justify-content: center;
align-items: center;
z-index: 1000;
}
/* when we add the “show” class it becomes visible/flex */
#overlay.show {
display: flex;
}
/* the enlarged image itself */
#overlay-img {
max-width: 90%;
max-height: 90%;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.5);
}