Compare commits

..

9 commits
1.0.0 ... main

Author SHA1 Message Date
Ananth Venkatesh
164cc66a1e
fix: comply with strict mit accessibility standards 2025-05-11 03:01:26 -04:00
Ananth Venkatesh
d1440136f4
feat: address accessibility concerns 2025-03-16 01:32:43 -04:00
Ananth Venkatesh
86adaa86a2
fix: resolve all hosting and url addresses 2025-03-01 02:38:24 -05:00
Ananth Venkatesh
f1e0aa5ec0
chore(git): ignore root index.html for deployment 2025-02-28 02:10:18 -05:00
Ananth Venkatesh
4f06d54e42
build(lock): update 2025-02-28 01:59:51 -05:00
Ananth Venkatesh
508c457ffb
feat: add entry descriptions 2025-02-28 01:56:03 -05:00
Youwen Wu
713d6d4486
feat: install entire site using nix 2025-02-16 15:51:42 -05:00
Ananth Venkatesh
21b946568d
build(lock): update 2025-02-16 02:14:56 -05:00
Ananth Venkatesh
1713c9e01e
docs(readme): add build instructions 2025-02-16 02:14:38 -05:00
7 changed files with 87 additions and 53 deletions

2
.gitignore vendored
View file

@ -16,3 +16,5 @@ result-*
# ---> Project # ---> Project
# Ignore compiled elm files # Ignore compiled elm files
compiled compiled
# Ignore hosting-specific files
/index.html

View file

@ -1 +1 @@
/nix/store/i4wcn83p1273vgv0nggpdbjqppq33aj7-pre-commit-config.json /nix/store/j8cvalbr8zkxdw6s2pnf2zhymd2m42r1-pre-commit-config.json

View file

@ -2,4 +2,19 @@
The all-new (very experimental) MacGregor House website The all-new (very experimental) MacGregor House website
## Building
To build, run
`nix build .`
For live preview, run
`bash watch.sh` and
`nix run nixpkgs#live-server`
then navigate to the `src` directory.
## Models
![A 3D model of MacGregor House](./assets/img/macg.png) ![A 3D model of MacGregor House](./assets/img/macg.png)

18
flake.lock generated
View file

@ -88,11 +88,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1739064336, "lastModified": 1746928027,
"narHash": "sha256-LTZznyurm9WWchG3uPH+8Sf5hkzZyHoa9FvDW0cLk0M=", "narHash": "sha256-kqJdF25vHpQTnagr6ixYr86ZJ953406byaJf48muhS8=",
"owner": "jeslie0", "owner": "jeslie0",
"repo": "mkElmDerivation", "repo": "mkElmDerivation",
"rev": "2d5f1acc6da7e6d5deeff5c9f47729a671ab8f9a", "rev": "74f7e6eb1cd18995071980f5dccf867e2b620db4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -119,11 +119,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1739446958, "lastModified": 1746663147,
"narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=", "narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2ff53fe64443980e139eaa286017f53f88336dd0", "rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -194,11 +194,11 @@
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1737465171, "lastModified": 1746537231,
"narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=", "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=",
"owner": "cachix", "owner": "cachix",
"repo": "pre-commit-hooks.nix", "repo": "pre-commit-hooks.nix",
"rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -48,8 +48,10 @@
elm make src/Main.elm --output Main.js --optimize elm make src/Main.elm --output Main.js --optimize
''; '';
installPhase = '' installPhase = ''
mkdir $out mkdir -p $out/dist/elm
cp Main.js $out cp Main.js $out/dist/elm
sed 's/..compiled\/Main.js/\/elm\/Main.js/' src/index.html > $out/dist/index.html
cp -r assets $out/dist/assets
''; '';
}; };
}; };
@ -70,7 +72,6 @@
nil.enable = true; nil.enable = true;
statix.enable = true; statix.enable = true;
markdownlint.enable = true; markdownlint.enable = true;
mdsh.enable = true;
typos.enable = true; typos.enable = true;
check-merge-conflicts.enable = true; check-merge-conflicts.enable = true;
commitizen.enable = true; commitizen.enable = true;

View file

@ -82,6 +82,7 @@ type alias Model =
, h : Int , h : Int
, last : String , last : String
, url : Url.Url , url : Url.Url
, path : String
, key : Nav.Key , key : Nav.Key
, mesh : Maybe Object3d , mesh : Maybe Object3d
, textures : Maybe (Material.Textured Obj.Decode.ObjCoordinates) , textures : Maybe (Material.Textured Obj.Decode.ObjCoordinates)
@ -95,19 +96,20 @@ type alias Model =
type alias Flags = type alias Flags =
( Int, Int ) ( Int, Int, String )
init : Flags -> Url.Url -> Nav.Key -> ( Model, Cmd Msg ) init : Flags -> Url.Url -> Nav.Key -> ( Model, Cmd Msg )
init flags url key = init flags url key =
let let
( width, height ) = ( width, height, path ) =
flags flags
in in
( { w = width ( { w = width
, h = height , h = height
, last = "" , last = ""
, url = url , url = url
, path = path
, key = key , key = key
, mesh = Nothing , mesh = Nothing
, textures = Nothing , textures = Nothing
@ -395,7 +397,7 @@ bodyText =
[ Font.color white [ Font.color white
, Font.family [ Font.typeface "Inter" ] , Font.family [ Font.typeface "Inter" ]
, Font.size 20 , Font.size 20
, width (px 600) , width (px 500)
] ]
@ -459,12 +461,12 @@ id =
Html.Attributes.id >> Element.htmlAttribute Html.Attributes.id >> Element.htmlAttribute
getPaths : String -> List String getPaths : String -> String -> List String
getPaths base = getPaths path base =
let let
root : String root : String
root = root =
"/" ++ base path ++ base
in in
List.map ((++) root) [ "", "/", "/index.html" ] List.map ((++) root) [ "", "/", "/index.html" ]
@ -484,13 +486,18 @@ itemize multikeys entry =
[] []
sitemap : Dict String (Model -> List (Html Msg)) sitemap : Model -> Dict String (Model -> List (Html Msg))
sitemap = sitemap model =
let
getter : String -> List String
getter =
getPaths model.path
in
Dict.fromList Dict.fromList
(itemize ([ "/", "/index.html" ] ++ getPaths "src" ++ getPaths "index" ++ getPaths "home") pageHome (itemize ([ "/", "/index.html", model.path ] ++ getter "src" ++ getter "index" ++ getter "home") pageHome
++ itemize (getPaths "entries") pageEntries ++ itemize (getter "entries") pageEntries
++ itemize (getPaths "about") pageAbout ++ itemize (getter "about") pageAbout
++ itemize (getPaths "colophon") colophon ++ itemize (getter "colophon") colophon
) )
@ -499,7 +506,7 @@ loadUrl model =
let let
req : Maybe (Model -> List (Html Msg)) req : Maybe (Model -> List (Html Msg))
req = req =
Dict.get model.url.path sitemap Dict.get model.url.path (sitemap model)
in in
case req of case req of
Just builder -> Just builder ->
@ -532,10 +539,13 @@ menu model =
, Font.family [ Font.typeface "Inter" ] , Font.family [ Font.typeface "Inter" ]
, Font.size 18 , Font.size 18
] ]
(row [ spacing 20 ] (column [ spacing 20 ]
[ inlineLinkInt "Entries" "/entries" [ row [] [ inlineLink "accessibility.mit.edu" "https://accessibility.mit.edu" ]
, inlineLinkInt "Access" "/about" , row [ spacing 20 ]
, inlineLinkInt "Colophon" "/colophon" [ inlineLinkInt "Entries" (model.path ++ "entries")
, inlineLinkInt "Access" (model.path ++ "about")
, inlineLinkInt "Colophon" (model.path ++ "colophon")
]
] ]
) )
@ -782,7 +792,7 @@ pageAbout model =
, column [ spacing 15 ] , column [ spacing 15 ]
[ row [ row
[ spacing 15 ] [ spacing 15 ]
[ linkBtnInt " Back" "/" [ linkBtnInt " Back" model.path
, btn "Directions" (Scroll "one") , btn "Directions" (Scroll "one")
] ]
, row [ spacing 15 ] , row [ spacing 15 ]
@ -809,7 +819,7 @@ pageAbout model =
, column , column
(page model ++ [ id "one" ]) (page model ++ [ id "one" ])
[ image (fullImage model) [ image (fullImage model)
{ src = "../assets/img/map.png" { src = model.path ++ "../assets/img/map.png"
, description = "mit campus map with pin at macgregor house" , description = "mit campus map with pin at macgregor house"
} }
, column (pageText model) , column (pageText model)
@ -878,7 +888,9 @@ pageAbout model =
, paragraph bodyText , paragraph bodyText
[ text "If you're experiencing issues viewing or interacting with parts of this website, please do not hesitate to " [ text "If you're experiencing issues viewing or interacting with parts of this website, please do not hesitate to "
, inlineLink "contact the webmaster" "mailto:ananthv@mit.edu" , inlineLink "contact the webmaster" "mailto:ananthv@mit.edu"
, text " at any time. We strive to make the story of MacGregor widely accessible to the general public, and we value your input and community support in achieving that goal." , text " at any time. We strive to make the story of MacGregor widely accessible to the general public, and we value your input and community support in achieving that goal. Please also see "
, inlineLink "accessibility.mit.edu" "https://accessibility.mit.edu/"
, text " for more options and public accessibility forms."
] ]
] ]
] ]
@ -940,7 +952,7 @@ pageEntries model =
[ entryLink "A entry" "A" [ entryLink "A entry" "A"
, text ", " , text ", "
, entryLink "Bentry" "B" , entryLink "Bentry" "B"
, text " (Office of the President), " , text ", "
, entryLink "Centry" "C" , entryLink "Centry" "C"
, text " (the C is silent), " , text " (the C is silent), "
, entryLink "Dentry" "D" , entryLink "Dentry" "D"
@ -960,7 +972,7 @@ pageEntries model =
[ row [ row
[ spacing 15 [ spacing 15
] ]
[ linkBtnInt " Back" "/" [ linkBtnInt " Back" model.path
, btn "Explore " (ScrollToEntry "J") , btn "Explore " (ScrollToEntry "J")
] ]
] ]
@ -998,7 +1010,7 @@ pageEntries model =
, image [ width (px 80), padding 12 ] { description = "flag of j entry", src = "../assets/img/jentry.png" } , image [ width (px 80), padding 12 ] { description = "flag of j entry", src = "../assets/img/jentry.png" }
] ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(J Entry) The heart of MacGregor. Historic culture, big lore. Jentry memes. Greatest MacGregor Housecomm representation of any entry. Jamily is forever." [ text "(J Entry) The heart of MacGregor. Historic culture, big lore. Jentry memes. J is for Jamily. We're an eclectic community, filled with everyone from introverts to extroverts, crazy vibes, chill vibes, and everything in between."
] ]
] ]
, el , el
@ -1031,7 +1043,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to A Entry." ] [ text "Welcome to A Entry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "Top floor. Top dog. Lots of dogs, in fact. Historic MacGregor cultural epicenter." [ text "Top floor. Top dog. Alpha wolf. Unity and strength. Positive, above average."
] ]
] ]
, el , el
@ -1064,7 +1076,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to Bentry." ] [ text "Welcome to Bentry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(B Entry) Office of the President. Sweeping views. Crossroads of the High Rise. B is for burgers?" [ text "(B Entry) Bentry is loud and fun and very social. We like to hang out with each other and check in, catch up, and go out. We banter a lot too but we are always there for each other. Were a family for sure."
] ]
] ]
, el , el
@ -1097,7 +1109,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to Centry." ] [ text "Welcome to Centry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(C Entry) Ceriously quiet. High enough to see the clouds, but low enough to stay grounded. MacGregor's creative capital core." [ text "(C Entry) Chill. Calmer. Sloths."
] ]
] ]
, el , el
@ -1120,7 +1132,7 @@ pageEntries model =
) )
] ]
, column , column
(page model ++ [ id "D", Background.color (rgb255 240 140 40) ]) (page model ++ [ id "D", Background.color (rgb255 40 140 240) ])
[ column (pageText model) [ column (pageText model)
[ row [ spacing 10 ] [ row [ spacing 10 ]
[ btn "" (ScrollToEntry "C") [ btn "" (ScrollToEntry "C")
@ -1130,7 +1142,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to Dentry." ] [ text "Welcome to Dentry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(D Entry) Office of the Vice President. Active after dark. Diligently working until dusk. The culture is palpable." [ text "(D Entry) D is for doing. Whether we stay in or go out (mostly go out), we have fun! D is also for degenerate. We are up the latest of all entries."
] ]
] ]
, el , el
@ -1153,7 +1165,7 @@ pageEntries model =
) )
] ]
, column , column
(page model ++ [ id "E", Background.color (rgb255 40 20 30) ]) (page model ++ [ id "E", Background.color (rgb255 221 162 126) ])
[ column (pageText model) [ column (pageText model)
[ row [ spacing 10 ] [ row [ spacing 10 ]
[ btn "" (ScrollToEntry "D") [ btn "" (ScrollToEntry "D")
@ -1163,7 +1175,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to E entry." ] [ text "Welcome to E entry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "Board games over Briggs field. Excellence in everything. End of story." [ text "We're a really cozy and friendly entry! We love having baking/cooking nights, watching movies, playing games, and just hanging out to chat. We also go out for dinners occasionally!"
] ]
] ]
, el , el
@ -1186,7 +1198,7 @@ pageEntries model =
) )
] ]
, column , column
(page model ++ [ id "F", Background.color (rgb255 200 50 75) ]) (page model ++ [ id "F", Background.color (rgb255 200 125 150) ])
[ column (pageText model) [ column (pageText model)
[ row [ spacing 10 ] [ row [ spacing 10 ]
[ btn "" (ScrollToEntry "E") [ btn "" (ScrollToEntry "E")
@ -1196,7 +1208,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to the Fentry." ] [ text "Welcome to the Fentry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(F entry) F is for Food. F is for Feast. F is for First (low rise block). F is Forever." [ text "(F entry) Typical nights for us look like playing poker, watching a movie, or just chilling and doing homework."
] ]
] ]
, el , el
@ -1219,7 +1231,7 @@ pageEntries model =
) )
] ]
, column , column
(page model ++ [ id "G", Background.color (rgb255 200 50 150) ]) (page model ++ [ id "G", Background.color (rgb255 250 150 50) ])
[ column (pageText model) [ column (pageText model)
[ row [ spacing 10 ] [ row [ spacing 10 ]
[ btn "" (ScrollToEntry "F") [ btn "" (ScrollToEntry "F")
@ -1229,7 +1241,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to the Gentry." ] [ text "Welcome to the Gentry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(G entry) G is for Greatness. Spans the Charles. Overlooks Fenway. Good things start in Gentry." [ text "(G entry) Chill but welcoming. The G in Gentry stands for Goofy, Gamers, and Good Times."
] ]
] ]
, el , el
@ -1252,7 +1264,7 @@ pageEntries model =
) )
] ]
, column , column
(page model ++ [ id "H", Background.color (rgb255 200 150 50) ]) (page model ++ [ id "H", Background.color (rgb255 50 175 50) ])
[ column (pageText model) [ column (pageText model)
[ row [ spacing 10 ] [ row [ spacing 10 ]
[ btn "" (ScrollToEntry "G") [ btn "" (ScrollToEntry "G")
@ -1262,7 +1274,7 @@ pageEntries model =
subheading subheading
[ text "Welcome to the Hentry." ] [ text "Welcome to the Hentry." ]
, paragraph (bodyText ++ [ Font.size 32 ]) , paragraph (bodyText ++ [ Font.size 32 ])
[ text "(H entry) Lots of chickens. Crossroads of the Low Rise. Largest entry in MacGregor." [ text "(H entry) Where the walls are hexagonal (not really), the vibes are chaotic-good, and the only thing more structured than our beehive of activity is our legendary group chats."
] ]
] ]
, el , el
@ -1341,7 +1353,7 @@ notFound model =
[ text "You were likely redirected here by a link to a page on the old website, the last known archive of which can be found " [ text "You were likely redirected here by a link to a page on the old website, the last known archive of which can be found "
, inlineLink "here" "https://web.archive.org/web/20170529064230/http://macgregor.mit.edu/" , inlineLink "here" "https://web.archive.org/web/20170529064230/http://macgregor.mit.edu/"
, text ". Unless you want to conduct research on ancient MIT traditions, you can probably find what you're looking for on the new " , text ". Unless you want to conduct research on ancient MIT traditions, you can probably find what you're looking for on the new "
, inlineLinkInt "main page" "/src" , inlineLinkInt "main page" (model.path ++ "/src")
, text ". If you believe this page really is missing, " , text ". If you believe this page really is missing, "
, inlineLink "contact the webmaster" "mailto:ananthv@mit.edu" , inlineLink "contact the webmaster" "mailto:ananthv@mit.edu"
, text "." , text "."
@ -1415,7 +1427,7 @@ colophon model =
] ]
[ text "Colophon." [ text "Colophon."
, row [ spacing 15 ] , row [ spacing 15 ]
[ linkBtnInt " Back" "/" [ linkBtnInt " Back" model.path
, linkBtn "Source" "https://forgejo.mit.edu/ananthv/macgregor" , linkBtn "Source" "https://forgejo.mit.edu/ananthv/macgregor"
, btn "Literature" (Scroll "one") , btn "Literature" (Scroll "one")
] ]

View file

@ -1,5 +1,5 @@
<!doctype html> <!doctype html>
<html> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>MacGregor House</title> <title>MacGregor House</title>
@ -16,7 +16,11 @@
<script> <script>
var app = Elm.Main.init({ var app = Elm.Main.init({
node: document.getElementById("app"), node: document.getElementById("app"),
flags: [window.innerWidth, window.innerHeight], flags: [
window.innerWidth,
window.innerHeight,
window.location.pathname,
],
}); });
app.ports.copyToClipboard.subscribe((tuple) => { app.ports.copyToClipboard.subscribe((tuple) => {