From c2a5dd4ee6b162c9547d73102d20f5158123eb79 Mon Sep 17 00:00:00 2001 From: Oliver Booth Date: Fri, 22 Dec 2023 14:49:16 +0000 Subject: [PATCH] style: add backing panel to page contents --- OliverBooth/Pages/Books.cshtml | 152 ++++++++------- OliverBooth/Pages/Contact/Blacklist.cshtml | 50 ++--- OliverBooth/Pages/Contact/Index.cshtml | 98 +++++----- OliverBooth/Pages/Donate.cshtml | 56 +++--- OliverBooth/Pages/Index.cshtml | 49 ++--- .../Pages/Privacy/FiveOClockSomewhere.cshtml | 106 ++++++----- OliverBooth/Pages/Privacy/GooglePlay.cshtml | 116 ++++++------ OliverBooth/Pages/Privacy/Index.cshtml | 144 +++++++------- OliverBooth/Pages/Projects/Index.cshtml | 178 +++++++++--------- OliverBooth/Pages/Tutorials/Index.cshtml | 34 ++-- src/scss/app.scss | 5 + 11 files changed, 510 insertions(+), 478 deletions(-) diff --git a/OliverBooth/Pages/Books.cshtml b/OliverBooth/Pages/Books.cshtml index 12d8138..1c6cccf 100644 --- a/OliverBooth/Pages/Books.cshtml +++ b/OliverBooth/Pages/Books.cshtml @@ -10,86 +10,94 @@ ViewData["Title"] = "Reading List"; } -

Reading List

-

- This is a list of the books I've read, I'm currently reading, or that I plan to read. Not every book is listed here, - but I will update this list as I try to remember what it is I've read in the past. -

-

- This list is also available on Goodreads. -

+
+

Reading List

+

+ This is a list of the books I've read, I'm currently reading, or that I plan to read. Not every book is listed + here, but I will update this list as I try to remember what it is I've read in the past. +

+

+ This list is also available on Goodreads. +

-

Currently Reading

- - - - - - - - - - - @foreach (IBook book in Model.CurrentlyReading.OrderBy(b => b.Author).ThenBy(b => b.Title)) - { +

Currently Reading

+
TitleAuthorISBN
+ - - - + + + - } - -
- Book Cover - @book.Title.Trim() - @book.Author.Trim()@book.Isbn.Trim()
@book.Isbn
TitleAuthorISBN
+ -

Plan to Read

- - - - - - - - + + @foreach (IBook book in Model.CurrentlyReading.OrderBy(b => b.Author).ThenBy(b => b.Title)) + { + + + + + + } + +
TitleAuthorISBN
+ Book Cover + @book.Title.Trim() + @book.Author.Trim() + @book.Isbn.Trim()
@book.Isbn +
- - @foreach (IBook book in Model.PlanToRead.OrderBy(b => b.Author).ThenBy(b => b.Title)) - { +

Plan to Read

+ + - - - + + + - } - -
- Book Cover - @book.Title.Trim() - @book.Author.Trim()@book.Isbn.Trim()
@book.Isbn
TitleAuthorISBN
+ -

Read

- - - - - - - - + + @foreach (IBook book in Model.PlanToRead.OrderBy(b => b.Author).ThenBy(b => b.Title)) + { + + + + + + } + +
TitleAuthorISBN
+ Book Cover + @book.Title.Trim() + @book.Author.Trim() + @book.Isbn.Trim()
@book.Isbn +
- - @foreach (IBook book in Model.Read.OrderBy(b => b.Author).ThenBy(b => b.Title)) - { +

Read

+ + - - - + + + - } - -
- Book Cover - @book.Title.Trim() - @book.Author.Trim()@book.Isbn.Trim()
@book.Isbn
TitleAuthorISBN
\ No newline at end of file + + + + @foreach (IBook book in Model.Read.OrderBy(b => b.Author).ThenBy(b => b.Title)) + { + + + Book Cover + @book.Title.Trim() + + @book.Author.Trim() + + @book.Isbn.Trim()
@book.Isbn + + + } + + +
\ No newline at end of file diff --git a/OliverBooth/Pages/Contact/Blacklist.cshtml b/OliverBooth/Pages/Contact/Blacklist.cshtml index 7b32189..a0101ac 100644 --- a/OliverBooth/Pages/Contact/Blacklist.cshtml +++ b/OliverBooth/Pages/Contact/Blacklist.cshtml @@ -6,31 +6,33 @@ ViewData["Title"] = "Blacklist"; } -

Contact Blacklist

-

- Below is a list of email addresses that have been blocked from contacting me. This list is public so that others may - also block these addresses if they wish. Any email address that contains an asterisk (*) is a wildcard, meaning that - any email address that matches the pattern will be blocked. -

+
+

Contact Blacklist

+

+ Below is a list of email addresses that have been blocked from contacting me. This list is public so that others + may also block these addresses if they wish. Any email address that contains an asterisk (*) is a wildcard, + meaning that any email address that matches the pattern will be blocked. +

-

- You can view this list in JSON format - here, - or in CSV format - here. -

+

+ You can view this list in JSON format + here, + or in CSV format + here. +

- - - - - - - @foreach (IBlacklistEntry entry in ContactService.GetBlacklist()) - { +
Name / EmailReason
- - + + - } -
@entry.Name <@entry.EmailAddress>@entry.ReasonName / EmailReason
\ No newline at end of file + + @foreach (IBlacklistEntry entry in ContactService.GetBlacklist()) + { + + @entry.Name <@entry.EmailAddress> + @entry.Reason + + } + +
\ No newline at end of file diff --git a/OliverBooth/Pages/Contact/Index.cshtml b/OliverBooth/Pages/Contact/Index.cshtml index 9b98c6e..decf1db 100644 --- a/OliverBooth/Pages/Contact/Index.cshtml +++ b/OliverBooth/Pages/Contact/Index.cshtml @@ -3,61 +3,63 @@ ViewData["Title"] = "Contact"; } -

Contact

-

- Thanks for getting in touch! While I do my best to read to all inquiries, I cannot guarantee that I will be able to - respond to your message. Nevertheless, I appreciate you taking the time to reach out to me and I will respond if I - can. -

- -
-

Spam warning

+
+

Contact

- I am politely asking that you respect my inbox and keep your unsolicited advertising away. This is a simple - request. If you send me any kind of spam after this, you have demonstrated that you do not have the basic human - decency to respect my wishes or my privacy, and you have lost the privilege for me to respect yours. I - will block your email address, and I will add your name to my public blacklist of spammers, - which you can find here. + Thanks for getting in touch! While I do my best to read to all inquiries, I cannot guarantee that I will be able + to respond to your message. Nevertheless, I appreciate you taking the time to reach out to me and I will respond + if I can.

-
-
-

Dear SEO marketing teams

-

- While I don't necessarily consider receiving legitimate offers for SEO services to be spam, I am not interested - in your services at this time. I understand that you are just doing your job, but hopefully you can do it more - efficiently by going to others who are more receptive to your services. -

-

- Do not contact me about SEO services. If you do, while I will not publicly blacklist your address, you will - - however - be blocked. -

-
- -
- - -
- - +
+

Spam warning

+

+ I am politely asking that you respect my inbox and keep your unsolicited advertising away. This is a simple + request. If you send me any kind of spam after this, you have demonstrated that you do not have the basic + human decency to respect my wishes or my privacy, and you have lost the privilege for me to respect yours. I + will block your email address, and I will add your name to my public blacklist of spammers, + which you can find here. +

-
- - +
+

Dear SEO marketing teams

+

+ While I don't necessarily consider receiving legitimate offers for SEO services to be spam, I am not + interested in your services at this time. I understand that you are just doing your job, but hopefully you + can do it more efficiently by going to others who are more receptive to your services. +

+

+ Do not contact me about SEO services. If you do, while I will not publicly blacklist your address, you + will - however - be blocked. +

-
- - -
+ + -
- - -
+
+ + +
- +
+ + +
- - \ No newline at end of file +
+ + +
+ +
+ + +
+ + + + + + \ No newline at end of file diff --git a/OliverBooth/Pages/Donate.cshtml b/OliverBooth/Pages/Donate.cshtml index 5f1b172..16baf99 100644 --- a/OliverBooth/Pages/Donate.cshtml +++ b/OliverBooth/Pages/Donate.cshtml @@ -3,35 +3,37 @@ ViewData["Title"] = "Donate"; } -

Donate

+
+

Donate

-

- I believe in free and open exchange of information, and I want to keep my educational content free for everyone to - access. I will never put ads on my site, and I don't want to put behind a paywall resources that should be available - to everybody, regardless of their financial situation. -

-

- However, writing tutorials takes time, and I do have to pay for hosting. While I will never ask you for money, I - will always appreciate it if you do decide to donate. It also helps me to know that people are finding my content - useful, and that I should continue to make more. -

-

- If you like what I do and are both willing and able to donate money to me and fund all of this, you can do so using - the links below. Thank you for your support! -

+

+ I believe in free and open exchange of information, and I want to keep my educational content free for everyone + to access. I will never put ads on my site, and I don't want to put behind a paywall resources that should be + available to everybody, regardless of their financial situation. +

+

+ However, writing tutorials takes time, and I do have to pay for hosting. While I will never ask you for money, I + will always appreciate it if you do decide to donate. It also helps me to know that people are finding my + content useful, and that I should continue to make more. +

+

+ If you like what I do and are both willing and able to donate money to me and fund all of this, you can do so + using the links below. Thank you for your support! +

-

- - -

+

+ + +

-

- -

+

+ +

-

I also accept cryptocurrency donations.

+

I also accept cryptocurrency donations.

-
    -
  • BTC: 1LmXvavJr1omscfkXjp7A4VyNf3XhKP9JK
  • -
  • ETH: 0x972C6641e36e2736823A6B1e6BA4D2A814b69fD2
  • -
\ No newline at end of file +
    +
  • BTC: 1LmXvavJr1omscfkXjp7A4VyNf3XhKP9JK
  • +
  • ETH: 0x972C6641e36e2736823A6B1e6BA4D2A814b69fD2
  • +
+
\ No newline at end of file diff --git a/OliverBooth/Pages/Index.cshtml b/OliverBooth/Pages/Index.cshtml index fc92985..8e5aae7 100644 --- a/OliverBooth/Pages/Index.cshtml +++ b/OliverBooth/Pages/Index.cshtml @@ -1,30 +1,33 @@ @page -

Hi, I'm Oliver.

-

I'm a tech enthusiast, coffee drinker, and software developer.

+
+

Hi, I'm Oliver.

+

I'm a tech enthusiast, coffee drinker, and software developer.

-

- -

+

+ +

-

- My primary focus is C#, though I have dabbled in several other languages such as Java, Kotlin, VB, C/C++, Python, - and others. Over the years I've built up a collection of projects. Some of which I'm extremely proud of, and others - I've quietly abandoned and buried. I'm currently working on a few projects that I hope to release in the near - future, but in the meantime, feel free to check out some of my previous work. -

+

+ My primary focus is C#, though I have dabbled in several other languages such as Java, Kotlin, VB, C/C++, + Python, and others. Over the years I've built up a collection of projects. Some of which I'm extremely proud of, + and others I've quietly abandoned and buried. I'm currently working on a few projects that I hope to release in + the near future, but in the meantime, feel free to check out some of my + previous work. +

-

- I've also written a few tutorials on various topics, usually involving - information not readily available elsewhere. I hope you find them useful. On occasion, I also write about other - topics that I find interesting, such as - my thoughts on the state of the world or the tech industry. -

+

+ I've also written a few tutorials on various topics, usually involving + information not readily available elsewhere. I hope you find them useful. On occasion, I also write about other + topics that I find interesting, such as + my thoughts on the state of the world or the tech industry. +

-

- If you want a general overview of stuff I've made, check out my GitHub, - itch.io, and - Google Play. -

+

+ If you want a general overview of stuff I've made, check out my + GitHub, itch.io, and + Google Play. +

-

If you'd like to get in touch, you can do so by clicking here.

\ No newline at end of file +

If you'd like to get in touch, you can do so by clicking here.

+
\ No newline at end of file diff --git a/OliverBooth/Pages/Privacy/FiveOClockSomewhere.cshtml b/OliverBooth/Pages/Privacy/FiveOClockSomewhere.cshtml index 703b689..7a345f2 100644 --- a/OliverBooth/Pages/Privacy/FiveOClockSomewhere.cshtml +++ b/OliverBooth/Pages/Privacy/FiveOClockSomewhere.cshtml @@ -3,64 +3,66 @@ ViewData["Title"] = "It's 5 O'Clock Somewhere Privacy Policy"; } -

@ViewData["Title"]

-

Last Updated: 24 September 2023

-
- This Privacy Policy differs from the policy that applies to other applications that I published on Google Play. For - the generalised privacy policy, please click here. -
+
+

@ViewData["Title"]

+

Last Updated: 24 September 2023

+
+ This Privacy Policy differs from the policy that applies to other applications that I published on Google Play. For + the generalised privacy policy, please click here. +
-

- This Privacy Policy describes how your personal information is collected, used, and shared when you use or interact - with the application It's 5 O'Clock Somewhere (the "Application"). -

+

+ This Privacy Policy describes how your personal information is collected, used, and shared when you use or interact + with the application It's 5 O'Clock Somewhere (the "Application"). +

-

Introduction

-

- I am committed to protecting your privacy and ensuring the security of any information you provide to me when using - my applications. This Privacy Policy outlines my practices regarding the collection, use, and disclosure of - information I may gather from users of the Application. -

+

Introduction

+

+ I am committed to protecting your privacy and ensuring the security of any information you provide to me when + using my applications. This Privacy Policy outlines my practices regarding the collection, use, and disclosure + of information I may gather from users of the Application. +

-

Information I Collect

-

- The Application will temporarily read your device's clock to determine the current time. This information is sent to - the Application's server to determine an accurate and time-zone aware response to you, the user. This information is - not stored or retained on the server. I do not use cookies, tracking technologies, or any other means to collect or - track your usage behavior within the Application. I do not have access to any personal data, including your name, - email address, or any other personally identifiable information. -

+

Information I Collect

+

+ The Application will temporarily read your device's clock to determine the current time. This information is + sent to the Application's server to determine an accurate and time-zone aware response to you, the user. This + information is not stored or retained on the server. I do not use cookies, tracking technologies, or any other + means to collect or track your usage behavior within the Application. I do not have access to any personal data, + including your name, email address, or any other personally identifiable information. +

-

Use of Information

-

- The Application uses the little information it collects from you to provide the Application's functionality to you. - This information is not used for any other purpose. -

+

Use of Information

+

+ The Application uses the little information it collects from you to provide the Application's functionality to + you. This information is not used for any other purpose. +

-

Disclosure of Information

-

- I do not disclose your personal information to any third parties unless required by law or with your explicit - consent. I maintain strict confidentiality and take reasonable precautions to protect your personal information from - unauthorized access, use, or disclosure. -

+

Disclosure of Information

+

+ I do not disclose your personal information to any third parties unless required by law or with your explicit + consent. I maintain strict confidentiality and take reasonable precautions to protect your personal information + from unauthorized access, use, or disclosure. +

-

Security

-

- I prioritize the security of your personal information and take reasonable precautions to protect it. However, - please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I cannot - guarantee absolute security. -

+

Security

+

+ I prioritize the security of your personal information and take reasonable precautions to protect it. However, + please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I + cannot guarantee absolute security. +

-

Changes to this Privacy Policy

-

- I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, - legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The - revised policy will be effective immediately upon posting. -

+

Changes to this Privacy Policy

+

+ I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, + legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The + revised policy will be effective immediately upon posting. +

-

Contact Me

-

- If you have any questions or concerns about this Privacy Policy or my privacy practices, please - get in touch. -

\ No newline at end of file +

Contact Me

+

+ If you have any questions or concerns about this Privacy Policy or my privacy practices, please + get in touch. +

+
\ No newline at end of file diff --git a/OliverBooth/Pages/Privacy/GooglePlay.cshtml b/OliverBooth/Pages/Privacy/GooglePlay.cshtml index e765bf5..befca57 100644 --- a/OliverBooth/Pages/Privacy/GooglePlay.cshtml +++ b/OliverBooth/Pages/Privacy/GooglePlay.cshtml @@ -3,68 +3,70 @@ ViewData["Title"] = "Google Play Privacy Policy"; } -

@ViewData["Title"]

-

Last Updated: 24 September 2023

-
- This Privacy Policy differs from the policy that applies to this website. For this website's privacy policy, please - click here. -
-
- This Privacy Policy does not apply to the application It's 5 O'Clock Somewhere. For the privacy policy that - applies to that application, please click here. -
+
+

@ViewData["Title"]

+

Last Updated: 24 September 2023

+
+ This Privacy Policy differs from the policy that applies to this website. For this website's privacy policy, + please click here. +
+
+ This Privacy Policy does not apply to the application It's 5 O'Clock Somewhere. For the privacy policy + that applies to that application, please click here. +
-

- This Privacy Policy describes how your personal information is collected, used, and shared when you use or interact - with applications that I publish on the Google Play Store. -

+

+ This Privacy Policy describes how your personal information is collected, used, and shared when you use or + interact with applications that I publish on the Google Play Store. +

-

Introduction

-

- I am committed to protecting your privacy and ensuring the security of any information you provide to me when using - my applications. This Privacy Policy outlines my practices regarding the collection, use, and disclosure of - information I may gather from users of my applications. -

+

Introduction

+

+ I am committed to protecting your privacy and ensuring the security of any information you provide to me when + using my applications. This Privacy Policy outlines my practices regarding the collection, use, and disclosure + of information I may gather from users of my applications. +

-

Information I Collect

-

- I do not collect any personally identifiable information about you when you use my applications. I do not use any - cookies or similar tracking technologies that can identify individual users or track your usage behavior within the - application. -

-

- However, please note that my applications may make use of third party integrations such as Google Play Services or - others. I am not responsible for the privacy practices or content of these third-party services. I encourage you to - review the privacy policies of those third-party services before providing any personal information. -

+

Information I Collect

+

+ I do not collect any personally identifiable information about you when you use my applications. I do not use any + cookies or similar tracking technologies that can identify individual users or track your usage behavior within + the application. +

+

+ However, please note that my applications may make use of third party integrations such as Google Play Services + or others. I am not responsible for the privacy practices or content of these third-party services. I encourage + you to review the privacy policies of those third-party services before providing any personal information. +

-

Use of Information

-

Since I do not collect any personal information about you, I do not use it for any purpose.

+

Use of Information

+

Since I do not collect any personal information about you, I do not use it for any purpose.

-

Disclosure of Information

-

I do not share any personal information about you because I do not collect any such information.

-

- However, please be aware that my applications contains links to third-party websites and services. I am not - responsible for the privacy practices or content of these third-party sites. I encourage you to review the privacy - policies of those third-party sites before providing any personal information. -

+

Disclosure of Information

+

I do not share any personal information about you because I do not collect any such information.

+

+ However, please be aware that my applications contains links to third-party websites and services. I am not + responsible for the privacy practices or content of these third-party sites. I encourage you to review the + privacy policies of those third-party sites before providing any personal information. +

-

Security

-

- I prioritize the security of your personal information and take reasonable precautions to protect it. However, - please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I cannot - guarantee absolute security. -

+

Security

+

+ I prioritize the security of your personal information and take reasonable precautions to protect it. However, + please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I + cannot guarantee absolute security. +

-

Changes to this Privacy Policy

-

- I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, - legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The - revised policy will be effective immediately upon posting. -

+

Changes to this Privacy Policy

+

+ I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, + legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The + revised policy will be effective immediately upon posting. +

-

Contact Me

-

- If you have any questions or concerns about this Privacy Policy or my privacy practices, please - get in touch. -

\ No newline at end of file +

Contact Me

+

+ If you have any questions or concerns about this Privacy Policy or my privacy practices, please + get in touch. +

+
\ No newline at end of file diff --git a/OliverBooth/Pages/Privacy/Index.cshtml b/OliverBooth/Pages/Privacy/Index.cshtml index d9cfd02..feaaac3 100644 --- a/OliverBooth/Pages/Privacy/Index.cshtml +++ b/OliverBooth/Pages/Privacy/Index.cshtml @@ -3,84 +3,86 @@ ViewData["Title"] = "Privacy Policy"; } -

@ViewData["Title"]

-

Last Updated: 26 May 2023

-
- This Privacy Policy differs from the policy that applies to my applications published to Google Play. For my - applications' privacy policy, please click here. -
+
+

@ViewData["Title"]

+

Last Updated: 26 May 2023

+
+ This Privacy Policy differs from the policy that applies to my applications published to Google Play. For my + applications' privacy policy, please click here. +
-

- This Privacy Policy describes how your personal information is collected, used, and shared when you visit or - interact with my website oliverbooth.dev. -

+

+ This Privacy Policy describes how your personal information is collected, used, and shared when you visit or + interact with my website oliverbooth.dev. +

-

Introduction

-

- I am committed to protecting your privacy and ensuring the security of any information you provide to me when using - my website. This Privacy Policy outlines my practices regarding the collection, use, and disclosure of information I - may gather from users of my website. -

+

Introduction

+

+ I am committed to protecting your privacy and ensuring the security of any information you provide to me when + using my website. This Privacy Policy outlines my practices regarding the collection, use, and disclosure of + information I may gather from users of my website. +

-

Information I Collect

-

- When you choose to contact me via the contact form on my website, I collect your name and email address. This - information is provided voluntarily by you and is necessary for me to respond to your inquiries and engage in a - conversation. I do not collect any additional personally identifiable information about you through the contact - form. -

-

I do not use any cookies or similar tracking technologies that can identify individual users.

-

- Please note that my website includes a Disqus integration for commenting on blog posts. Disqus is a third-party - service, and their use of cookies and collection of personal information are governed by their own privacy policies. - I have no control over the information collected by Disqus, and I encourage you to review their privacy policy to - understand how your information may be used by them. -

+

Information I Collect

+

+ When you choose to contact me via the contact form on my website, I collect your name and email address. This + information is provided voluntarily by you and is necessary for me to respond to your inquiries and engage in a + conversation. I do not collect any additional personally identifiable information about you through the contact + form. +

+

I do not use any cookies or similar tracking technologies that can identify individual users.

+

+ Please note that my website includes a Disqus integration for commenting on blog posts. Disqus is a third-party + service, and their use of cookies and collection of personal information are governed by their own privacy + policies. I have no control over the information collected by Disqus, and I encourage you to review their + privacy policy to understand how your information may be used by them. +

-

Use of Information

-

- The name and email address you provide through the contact form are used solely for the purpose of responding to - your inquiries and engaging in relevant conversation. I keep this information confidential and do not disclose, - sell, or share it with any third parties unless required by law or with your explicit consent. -

-

- I do not use your personal information for marketing purposes or send you any unsolicited communications. Once our - conversation is complete and no longer necessary, I will securely delete your personal information unless otherwise - required to retain it by applicable laws or regulations. -

+

Use of Information

+

+ The name and email address you provide through the contact form are used solely for the purpose of responding to + your inquiries and engaging in relevant conversation. I keep this information confidential and do not disclose, + sell, or share it with any third parties unless required by law or with your explicit consent. +

+

+ I do not use your personal information for marketing purposes or send you any unsolicited communications. Once + our conversation is complete and no longer necessary, I will securely delete your personal information unless + otherwise required to retain it by applicable laws or regulations. +

-

Disclosure of Information

-

- I do not disclose your personal information to any third parties unless required by law or with your explicit - consent. I maintain strict confidentiality and take reasonable precautions to protect your personal information from - unauthorized access, use, or disclosure. -

-

- However, please be aware that my website contains links to third-party websites and services. I am not responsible - for the privacy practices or content of these third-party sites. I encourage you to review the privacy policies of - those third-party sites before providing any personal information. -

+

Disclosure of Information

+

+ I do not disclose your personal information to any third parties unless required by law or with your explicit + consent. I maintain strict confidentiality and take reasonable precautions to protect your personal information + from unauthorized access, use, or disclosure. +

+

+ However, please be aware that my website contains links to third-party websites and services. I am not + responsible for the privacy practices or content of these third-party sites. I encourage you to review the + privacy policies of those third-party sites before providing any personal information. +

-

Security

-

- I prioritize the security of your personal information and take reasonable precautions to protect it. However, - please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I cannot - guarantee absolute security. -

+

Security

+

+ I prioritize the security of your personal information and take reasonable precautions to protect it. However, + please be aware that no method of transmission over the internet or electronic storage is 100% secure, and I + cannot guarantee absolute security. +

-

Changes to this Privacy Policy

-

- I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, - legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The - revised policy will be effective immediately upon posting. -

+

Changes to this Privacy Policy

+

+ I may update this Privacy Policy from time to time to reflect changes in my practices or for other operational, + legal, or regulatory reasons. I encourage you to review this Privacy Policy periodically for any updates. The + revised policy will be effective immediately upon posting. +

-

Contact Me

-

- If you have any questions or concerns about this Privacy Policy or my privacy practices, please - get in touch. -

+

Contact Me

+

+ If you have any questions or concerns about this Privacy Policy or my privacy practices, please + get in touch. +

-
+
-

By using my website, you signify your acceptance of this Privacy Policy.

\ No newline at end of file +

By using my website, you signify your acceptance of this Privacy Policy.

+
\ No newline at end of file diff --git a/OliverBooth/Pages/Projects/Index.cshtml b/OliverBooth/Pages/Projects/Index.cshtml index bee4511..5db4be2 100644 --- a/OliverBooth/Pages/Projects/Index.cshtml +++ b/OliverBooth/Pages/Projects/Index.cshtml @@ -6,100 +6,102 @@ ViewData["Title"] = "Projects"; } -

Projects

+
+

Projects

-@foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Ongoing).OrderBy(p => p.Rank).Chunk(2)) -{ -
- @foreach (IProject project in chunk) - { -
-
-
In Active Development
- @project.Name -
-
@project.Name
-

@Html.Raw(ProjectService.GetDescription(project))

- @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) - { - - @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) - { - View website - } - else - { - View on @project.RemoteTarget - } - - } + @foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Ongoing).OrderBy(p => p.Rank).Chunk(2)) + { +
+ @foreach (IProject project in chunk) + { +
+
+
In Active Development
+ @project.Name +
+
@project.Name
+

@Html.Raw(ProjectService.GetDescription(project))

+ @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) + { + + @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) + { + View website + } + else + { + View on @project.RemoteTarget + } + + } +
-
- } -
-} + } +
+ } -@foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Past).Chunk(2)) -{ -
- @foreach (IProject project in chunk) - { -
-
-
Past Work
- @project.Name -
-
@project.Name
-

@Html.Raw(ProjectService.GetDescription(project))

- @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) - { - - @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) - { - View website - } - else - { - View on @project.RemoteTarget - } - - } + @foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Past).Chunk(2)) + { +
+ @foreach (IProject project in chunk) + { +
+
+
Past Work
+ @project.Name +
+
@project.Name
+

@Html.Raw(ProjectService.GetDescription(project))

+ @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) + { + + @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) + { + View website + } + else + { + View on @project.RemoteTarget + } + + } +
-
- } -
-} + } +
+ } -@foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Hiatus).Chunk(2)) -{ -
- @foreach (IProject project in chunk) - { -
-
-
On Hiatus
- @project.Name -
-
@project.Name
-

@Html.Raw(ProjectService.GetDescription(project))

- @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) - { - - @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) - { - View website - } - else - { - View on @project.RemoteTarget - } - - } + @foreach (IProject[] chunk in ProjectService.GetProjects(ProjectStatus.Hiatus).Chunk(2)) + { +
+ @foreach (IProject project in chunk) + { +
+
+
On Hiatus
+ @project.Name +
+
@project.Name
+

@Html.Raw(ProjectService.GetDescription(project))

+ @if (!string.IsNullOrWhiteSpace(project.RemoteUrl)) + { + + @if (string.IsNullOrWhiteSpace(project.RemoteTarget)) + { + View website + } + else + { + View on @project.RemoteTarget + } + + } +
-
- } -
-} \ No newline at end of file + } +
+ } +
\ No newline at end of file diff --git a/OliverBooth/Pages/Tutorials/Index.cshtml b/OliverBooth/Pages/Tutorials/Index.cshtml index 35e8cec..f865f49 100644 --- a/OliverBooth/Pages/Tutorials/Index.cshtml +++ b/OliverBooth/Pages/Tutorials/Index.cshtml @@ -3,19 +3,21 @@ ViewData["Title"] = "Tutorials"; } -

Tutorials

-

Coming Soon

-

- Due to Unity's poor corporate decision-making, I'm left in a position where I find it infeasible to write Unity - tutorials. I plan to write tutorials for things like Unreal and MonoGame as I learn them, and C# tutorials are - still on the table for sure. But tutorials take a lot of time and effort, so unfortunately it may be a while before - I can get around to publishing them. -

-

- However, in the meantime, I do have various blog posts that contain some tutorials and guides. You can find them - here! -

-

- I'm sorry for the inconvenience, but I hope you understand my position. Watch this space! New tutorials will be - coming. If you have any questions or requests, please feel free to contact me. -

+
+

Tutorials

+

Coming Soon

+

+ Due to Unity's poor corporate decision-making, I'm left in a position where I find it infeasible to write Unity + tutorials. I plan to write tutorials for things like Unreal and MonoGame as I learn them, and C# tutorials are + still on the table for sure. But tutorials take a lot of time and effort, so unfortunately it may be a while + before I can get around to publishing them. +

+

+ However, in the meantime, I do have various blog posts that contain some tutorials and guides. You can find them + here! +

+

+ I'm sorry for the inconvenience, but I hope you understand my position. Watch this space! New tutorials will be + coming. If you have any questions or requests, please feel free to contact me. +

+
\ No newline at end of file diff --git a/src/scss/app.scss b/src/scss/app.scss index cdbbb40..6ff4aef 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -23,6 +23,11 @@ body { margin-bottom: 60px; } +main.container { + background: #333; + padding: 20px; +} + a { &:link, &:visited, &:hover, &:active { text-decoration: none;