From 4389b07f39e8caa05984f24c456fa8893aeda93f Mon Sep 17 00:00:00 2001 From: rawleyIfowler Date: Sun, 6 Feb 2022 17:33:47 -0600 Subject: [PATCH] init --- controllers/blog.go | 41 +++++++++++ go.mod | 5 ++ go.sum | 49 +++++++++++++ main.go | 33 +++++++++ models/blog_post.go | 31 +++++++++ models/comment.go | 24 +++++++ static/Resume.pdf | Bin 0 -> 50609 bytes static/bg.svg | 1 + static/index.css | 145 +++++++++++++++++++++++++++++++++++++++ templates/footer.tmpl | 9 +++ templates/header.tmpl | 13 ++++ templates/index.tmpl | 12 ++++ templates/nav.tmpl | 20 ++++++ templates/not_found.tmpl | 7 ++ templates/resume.tmpl | 30 ++++++++ utils/routes.go | 41 +++++++++++ 16 files changed, 461 insertions(+) create mode 100644 controllers/blog.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 models/blog_post.go create mode 100644 models/comment.go create mode 100644 static/Resume.pdf create mode 100644 static/bg.svg create mode 100644 static/index.css create mode 100644 templates/footer.tmpl create mode 100644 templates/header.tmpl create mode 100644 templates/index.tmpl create mode 100644 templates/nav.tmpl create mode 100644 templates/not_found.tmpl create mode 100644 templates/resume.tmpl create mode 100644 utils/routes.go diff --git a/controllers/blog.go b/controllers/blog.go new file mode 100644 index 0000000..c7521c4 --- /dev/null +++ b/controllers/blog.go @@ -0,0 +1,41 @@ +package controllers + +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +import ( + "github.com/gin-gonic/gin" + "net/http" + "gitlab.com/rawleyifowler/site-rework/models" +) + +func RegisterBlogGroup(r *gin.RouterGroup) { + r.GET("/", RenderBlogPage) + r.GET("/post/:url", RenderIndividualBlogPost) +} + +func RenderBlogPage(c *gin.Context) { + +} + +func RenderIndividualBlogPost(c *gin.Context) { + +} + +func GetAllBlogPosts() { + +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..aeda7ed --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module gitlab.com/rawleyifowler/site-rework + +go 1.15 + +require github.com/gin-gonic/gin v1.7.7 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..abee8fc --- /dev/null +++ b/go.sum @@ -0,0 +1,49 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= +github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go new file mode 100644 index 0000000..7ce8b66 --- /dev/null +++ b/main.go @@ -0,0 +1,33 @@ +package main + +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +import ( + "github.com/gin-gonic/gin" + "gitlab.com/rawleyifowler/site-rework/utils" +) + +var router *gin.Engine + +func main() { + router = gin.Default() + router.Static("/static", "./static") + router.LoadHTMLGlob("templates/*.tmpl") + utils.InitializeRoutes(router) + router.Run() +} diff --git a/models/blog_post.go b/models/blog_post.go new file mode 100644 index 0000000..3653a46 --- /dev/null +++ b/models/blog_post.go @@ -0,0 +1,31 @@ +package models + +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +type BlogPost struct { + Url string `json:"url"` + Title string `json:"title"` + Date string `json:"date"` + Comments []Comment +} + +// Load comments here +func (b *BlogPost) LoadComments() bool { + + return false +} diff --git a/models/comment.go b/models/comment.go new file mode 100644 index 0000000..b960053 --- /dev/null +++ b/models/comment.go @@ -0,0 +1,24 @@ +package models + +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +type Comment struct { + Date string `json:"date"` + Author string `json:"author"` + Content string `json:"content"` +} diff --git a/static/Resume.pdf b/static/Resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..08ff561cf611f247a74672043060bdff488420db GIT binary patch literal 50609 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 \ No newline at end of file diff --git a/static/index.css b/static/index.css new file mode 100644 index 0000000..6d931d0 --- /dev/null +++ b/static/index.css @@ -0,0 +1,145 @@ +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ +body { + color: #242124; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + -webkit-font-smoothing: antialias; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + background-image: url('/static/bg.svg'); + background-repeat: no-repeat; + background-size: cover; + font-size: calc(12px + 0.33vw); + max-width: 100vw; + min-height: 100vh; + margin-left: 3vw; + margin-right: 3vw; +} + +h1 { + font-size: 2em; + font-weight: 800; + margin-bottom: 0; + margin-top: 12px; +} + +h2 { + font-size: 1.3em; + font-weight: 700; + margin-bottom: 0; +} + +h3 { + font-size: 1.2em; + font-weight: 600; + margin-bottom: 0; +} + +p { + font-size: 1em; + font-weight: 500; + line-height: 1.4; + max-width: 33em; + margin-right: 12px; +} + +a { + text-decoration: none; + color: #242124; + position: relative; + transition: 100ms linear; +} + +a:hover { + color: rgba(72,61,139, 0.3); +} + +a::after { + content: ''; + position: absolute; + z-index: -1; + top: 83%; + left: -0.1em; + right: -0.1em; + bottom: 0; + transition: 200ms cubic-bezier(0, 0.8, 0.13, 1); + background-color: rgba(72,61,139, 0.3); +} + +a::after:hover { + background-color: rgba(129, 66, 180, 0.3); + top: 0%; +} + +.header { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.nav-bar { + display: flex; + flex-direction: row; + font-size: 1.1em; + margin-top: calc(12px + 1vh); +} + +.nav-item { + display: block; + margin-left: 12px; + margin-right: 12px; + font-weight: 800; +} + +.content-wrapper { + margin: 12px; +} + +.footer-text { + font-size: 0.8em; +} + +.post-record { + background-color: rgba(233, 233, 233, 0.6); + padding-left: 12px; + padding-right: 12px; + width: 200px + 2vw; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin-top: 9px; +} + +.skill-keywords { + overflow: wrap; + font-size: 0.9em; +} + +.skill-keywords > i::before { + content: " '"; +} + +.skill-keywords > i::after { + content: "' "; +} + +@media only screen and (max-width: 508px) { + .header { + flex-direction: column; + justify-content: center; + } +} diff --git a/templates/footer.tmpl b/templates/footer.tmpl new file mode 100644 index 0000000..2e132e9 --- /dev/null +++ b/templates/footer.tmpl @@ -0,0 +1,9 @@ + + + + diff --git a/templates/header.tmpl b/templates/header.tmpl new file mode 100644 index 0000000..b28f069 --- /dev/null +++ b/templates/header.tmpl @@ -0,0 +1,13 @@ + + + + + + + + + + rawley.xyz + + + {{ template "nav.tmpl" . }} diff --git a/templates/index.tmpl b/templates/index.tmpl new file mode 100644 index 0000000..8341282 --- /dev/null +++ b/templates/index.tmpl @@ -0,0 +1,12 @@ +{{ template "header.tmpl" . }} +

My name is Rawley!

+

+ I am an independent full-stack developer from Canada. Currently pursuing a degree in Computer Science, with hopes of participating in a graduate program. +

+

+ I am a GNU/Linux and OpenBSD enthusiast. I am active in both the Debian and Void GNU/Linux communities. My favourite programming languages are Go and Clojure. You can check out my work on GitLab. I am currently working on an open-source community based blogging network called xrn. +

+

+ When I'm not programming, I'm either reading, cooking, playing table-top games, or walking my dog. +

+{{ template "footer.tmpl" . }} diff --git a/templates/nav.tmpl b/templates/nav.tmpl new file mode 100644 index 0000000..1bd540a --- /dev/null +++ b/templates/nav.tmpl @@ -0,0 +1,20 @@ + +
+

+ Rawley.xyz +

+ +
diff --git a/templates/not_found.tmpl b/templates/not_found.tmpl new file mode 100644 index 0000000..61f17ba --- /dev/null +++ b/templates/not_found.tmpl @@ -0,0 +1,7 @@ + +{{ template "header.tmpl" . }} +

404 Not Found :(

+

+ Click here to return home. +

+{{ template "footer.tmpl" . }} diff --git a/templates/resume.tmpl b/templates/resume.tmpl new file mode 100644 index 0000000..4721fd6 --- /dev/null +++ b/templates/resume.tmpl @@ -0,0 +1,30 @@ + +{{ template "header.tmpl" . }} +

My resume

+

+ View my resume (pdf). +

+

+ GNU/Linux + Debian + OpenBSD + Go + Clojure + Git + Gentoo + Java + NGiNX + Vim + C/C++ + NetBSD + JavaScript + HTML + CSS + Unix + Vue + MariaDB + Korn Shell + Bash + Lua +

+{{ template "footer.tmpl" . }} diff --git a/utils/routes.go b/utils/routes.go new file mode 100644 index 0000000..73fcc6d --- /dev/null +++ b/utils/routes.go @@ -0,0 +1,41 @@ +package utils + +/* +Copyright (C) 2022 Rawley Fowler + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +// Initializes all routes from the controller package +func InitializeRoutes(router *gin.Engine) { + router.NoRoute(ServePage("not_found.tmpl")) + router.GET("/", ServePage("index.tmpl")) + router.GET("/resume", ServePage("resume.tmpl")) +} + +// Returns a handler function to serve a page based on the template that is inputted +func ServePage(temp string) gin.HandlerFunc { + return func(c *gin.Context) { + c.HTML( + http.StatusOK, + temp, + gin.H{}, + ) + } +}