Compare commits

..

7 commits
1.0.0 ... main

Author SHA1 Message Date
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 76 additions and 47 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/4wj49hvsmkannf285i53qczyjggvly5w-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)

View file

@ -88,11 +88,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1739064336, "lastModified": 1740274080,
"narHash": "sha256-LTZznyurm9WWchG3uPH+8Sf5hkzZyHoa9FvDW0cLk0M=", "narHash": "sha256-tDNZc/PVt9z2m7i5PKuYJ9Ii60A2oNrtl6qTeqqmoJc=",
"owner": "jeslie0", "owner": "jeslie0",
"repo": "mkElmDerivation", "repo": "mkElmDerivation",
"rev": "2d5f1acc6da7e6d5deeff5c9f47729a671ab8f9a", "rev": "93c08ae888748f71873539bebcae981cf72f3f44",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -119,11 +119,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1739446958, "lastModified": 1740695751,
"narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=", "narHash": "sha256-D+R+kFxy1KsheiIzkkx/6L63wEHBYX21OIwlFV8JvDs=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2ff53fe64443980e139eaa286017f53f88336dd0", "rev": "6313551cd05425cd5b3e63fe47dbc324eabb15e4",
"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 ->
@ -533,9 +540,9 @@ menu model =
, Font.size 18 , Font.size 18
] ]
(row [ spacing 20 ] (row [ spacing 20 ]
[ inlineLinkInt "Entries" "/entries" [ inlineLinkInt "Entries" (model.path ++ "entries")
, inlineLinkInt "Access" "/about" , inlineLinkInt "Access" (model.path ++ "about")
, inlineLinkInt "Colophon" "/colophon" , inlineLinkInt "Colophon" (model.path ++ "colophon")
] ]
) )
@ -782,7 +789,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 +816,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)
@ -940,7 +947,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 +967,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 +1005,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 +1038,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 +1071,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 +1104,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 +1127,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 +1137,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 +1160,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 +1170,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 +1193,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 +1203,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 +1226,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 +1236,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 +1259,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 +1269,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 +1348,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 +1422,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

@ -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) => {