feat: so very close

This commit is contained in:
Nick 2024-12-28 18:42:47 -06:00
parent 131dbfe8a3
commit f9b8f59df9
30 changed files with 1500 additions and 1272 deletions

View file

@ -1,5 +1,6 @@
module Pages.Services.Analysis exposing (Model, Msg, page)
import Config.Helpers.Articles.Article exposing (contentList)
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C exposing (..)
import Config.Helpers.Format exposing (..)
@ -9,6 +10,7 @@ import Config.Helpers.Response exposing (pageList, topLevelContainer)
import Config.Helpers.ServiceFormat exposing (..)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Services.Records.DebateAnalysis exposing (..)
import Config.Style.Colour.Helpers exposing (colourTheme)
import Config.Style.Transitions
@ -119,23 +121,59 @@ analysisList device =
List.concat
[ List.map
(\service ->
cardMaker device (C.ServicePage service) contentList
cardMaker device
(C.BlogArticle service)
(contentList service
[ el
[ paddingXY 0 10
, centerX
]
<|
buyButton "Book!" "https://buy.stripe.com/14k3dr4Zh8p6c3mbIJ"
]
)
)
[ servicesDebateAnalysis ]
[ debateAnalysis ]
]
contentList : List (Element msg)
contentList =
[ column
bodyFormat
[ chunkMaker servicesDebateAnalysis.serviceArticle.articleParagraph.paragraph1
, chunkMaker
servicesDebateAnalysis.serviceArticle.articleParagraph.paragraph2
, titleMaker servicesDebateAnalysis.serviceArticle.articleTitles.title1
, numberMaker servicesDebateAnalysis.serviceArticle.articleListEntries.list1
, titleMaker servicesDebateAnalysis.serviceArticle.articleTitles.title2
, bulletPointMaker servicesDebateAnalysis.serviceArticle.articleListEntries.list2
, buyButton "Book!" "https://buy.stripe.com/14k3dr4Zh8p6c3mbIJ"
debateAnalysis : BlogArticle
debateAnalysis =
{ articleName = String.toUpper "Debate Analysis"
, articleLink = ""
, articleAuthor = ""
, isNewTabLink = False
, hasReferences = False
, hasTableOfContents = False
, articleImage = ""
, articlePublished = ""
, articleBody = """
The Debate Analysis services offers personalized feedback to help you improve your debate skills. I work with clients by reviewing their pre-recorded debates, providing detailed critiques, and offering practical advice tailored to their style. Through this process, you'll gain valuable insights into areas of improvement, from your argument structure to your delivery and confidence.
# BENEFITS
1. Have your own debates analyzed for constructive feedback. This allows you to receive targeted guidance on how to improve your debating technique and strategy.
2. Receive advice to improve as a debater. This service provides personalized recommendations to help you develop and refine your debating abilities.
3. Gain comfort with debate and verbal confrontation. The service aims to help you become more confident and adept at handling the challenges of public debate.
# REQUIREMENTS
Your debate recording must be submitted at least three days prior to the session.
Your debate recording must not exceed one hour in length unless otherwise agreed to.
Your debate recording must be in either video or audio format, as text debates are ineligible.
"""
, articleReferences =
[ { author = ""
, title = ""
, journal = ""
, year = ""
, link = ""
}
]
]
}

View file

@ -1,5 +1,6 @@
module Pages.Services.Coaching exposing (Model, Msg, page)
import Config.Helpers.Articles.Article exposing (contentList)
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C
import Config.Helpers.Format exposing (..)
@ -14,6 +15,7 @@ import Config.Helpers.Response
import Config.Helpers.ServiceFormat exposing (..)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Services.Records.DebateCoaching exposing (servicesDebateCoaching)
import Config.Style.Colour.Helpers exposing (colourTheme)
import Config.Style.Transitions
@ -124,29 +126,108 @@ coachingList device =
List.concat
[ List.map
(\service ->
cardMaker device (C.ServicePage service) contentList
cardMaker device
(C.BlogArticle service)
(contentList service
[ el
[ paddingXY 0 10
, centerX
]
<|
buyButton "Book!" "https://buy.stripe.com/14k01f3Vd6gY6J2146"
]
)
)
[ servicesDebateCoaching ]
[ debateCoaching ]
]
debateCoaching : BlogArticle
debateCoaching =
{ articleName = String.toUpper "Debate Tutoring"
, articleLink = ""
, articleAuthor = ""
, isNewTabLink = False
, hasReferences = False
, hasTableOfContents = False
, articleImage = ""
, articlePublished = ""
, articleBody = """
This service is designed to help you gain an understanding of the fundamentals of debate, and the tools used in debate. The service spans five modules, covering fallacious reasoning, epistemology, and propositional logic. You're free to choose which modules you want to cover, based on your current knowledge and interests.
If interested clients choose to text their knowledge and sharpen their skills with mock debates, they may be subject to additional fees, as mock debates often involve the inclusion of skillful third parties against whom clients can spar.
contentList : List (Element msg)
contentList =
[ column
bodyFormat
[ chunkMaker servicesDebateCoaching.serviceArticle.articleParagraph.paragraph1
, chunkMaker servicesDebateCoaching.serviceArticle.articleParagraph.paragraph2
, titleMaker servicesDebateCoaching.serviceArticle.articleTitles.title1
, numberMaker servicesDebateCoaching.serviceArticle.articleListEntries.list1
, titleMaker servicesDebateCoaching.serviceArticle.articleTitles.title2
# WHAT YOU GET
-- modules
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title3 servicesDebateCoaching.serviceArticle.articleListEntries.list3
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title4 servicesDebateCoaching.serviceArticle.articleListEntries.list4
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title5 servicesDebateCoaching.serviceArticle.articleListEntries.list5
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title6 servicesDebateCoaching.serviceArticle.articleListEntries.list6
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title7 servicesDebateCoaching.serviceArticle.articleListEntries.list7
, highlightedBlockMaker servicesDebateCoaching.serviceArticle.articleTitles.title8 servicesDebateCoaching.serviceArticle.articleListEntries.list8
, buyButton "Book!" "https://buy.stripe.com/14k01f3Vd6gY6J2146"
1. A five-module course covering critical thinking, debate strategy, and propositional logic, designed to strengthen your debating skills.
2. Personalized feedback and guidance to boost your strategic thinking, verbal comfort, and overall debate effectiveness.
3. Optional mock debates and staged confrontations, helping you gain experience and confidence in real-world debates.
# SYLLABUS
>## MODULE 1
>
> Study both common and obscure logical fallacies.
>
> Learn to identify and rebut fallacious reasoning.
>
> Test your knowledge of logical fallacies.
>## MODULE 2
>
> Assignment review.
>
> Study concepts related to formal logic and argumentation.
>
> Learn the lexicon of debate and formal reasoning.
>
> Test your knowledge of debate-related terminology.
>## MODULE 3
>
> Assignment review.
>
> Study philosophical concepts relevant to debate.
>
> Learn about epistemology and the philosophy of science.
>
> Test your knowledge of debate-related philosophical concepts.
>## MODULE 4
>
> Assignment review.
>
> Study the different modes of argumentation.
>
> Learn the principles and axioms of propositional logic.
>
> Test your knowledge of propositional logic fundamentals.
>## MODULE 5
>
> Assignment review.
>
> Study the inference rules of propositional logic.
>
> Learn how to form valid formal arguments.
>
> Test your knowledge of formal logic.
>## OPTIONAL
>
> Test your knowledge in an optional mock debate.
>
> Choose between general, empirical, and NTT-style debate.
>
> Have your performance analyzed in realtime.
"""
, articleReferences =
[ { author = ""
, title = ""
, journal = ""
, year = ""
, link = ""
}
]
]
}

View file

@ -1,5 +1,6 @@
module Pages.Services.Elm exposing (Model, Msg, page)
import Config.Helpers.Articles.Article exposing (contentList)
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C
import Config.Helpers.Format exposing (..)
@ -13,6 +14,7 @@ import Config.Helpers.Response
import Config.Helpers.ServiceFormat exposing (..)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Services.Records.ElmBuilds exposing (servicesElmBuilds)
import Config.Style.Colour.Helpers exposing (..)
import Config.Style.Transitions
@ -123,27 +125,62 @@ elmBuildsList device =
List.concat
[ List.map
(\service ->
cardMaker device (C.ServicePage service) contentList
cardMaker device
(C.BlogArticle service)
(contentList service
[ elmCodeRenderer ]
)
)
[ servicesElmBuilds ]
[ elmBuilds ]
]
contentList : List (Element msg)
contentList =
[ column
bodyFormat
[ chunkMaker servicesElmBuilds.serviceArticle.articleParagraph.paragraph1
, chunkMaker servicesElmBuilds.serviceArticle.articleParagraph.paragraph2
, chunkMaker servicesElmBuilds.serviceArticle.articleParagraph.paragraph3
, titleMaker servicesElmBuilds.serviceArticle.articleTitles.title1
, numberMaker servicesElmBuilds.serviceArticle.articleListEntries.list1
, titleMaker servicesElmBuilds.serviceArticle.articleTitles.title2
, bulletPointMaker servicesElmBuilds.serviceArticle.articleListEntries.list2
, titleMaker servicesElmBuilds.serviceArticle.articleTitles.title3
, elmCodeRenderer
elmBuilds : BlogArticle
elmBuilds =
{ articleName = String.toUpper "Elm Builds"
, articleLink = ""
, articleAuthor = ""
, isNewTabLink = False
, hasReferences = False
, hasTableOfContents = False
, articleImage = ""
, articlePublished = ""
, articleBody = """
The site that you're currently viewing this on was written by me in the Elm programming language. In the process of programming this website, I realized that I could create reasonably high quality work with Elm, so I'm offering it as a service at a fee that reflects my skill level.
If you're in the market for a new frontend for your website, please inquire at nick@upRootNutrition.com.
Below is an example of a helper function that I wrote for this site. This particular function extracts the first 80 words from all of my articles' markdown strings, and displays them as blurbs, followed by an ellipsis, in my article cards using my markdown parser.
The source code for this website is viewable on [Gitlab](https://gitlab.com/upRootNutrition/website).
# WHAT YOU GET
1. An Elm-based website written to your specifications.
2. Two revisions to better meet your needs and vision.
3. Six months of free support to correct mistakes.
# REQUIREMENTS
A clear vision of what you want your site to look like.
A clear description of your site's pages and structure.
Any bespoke frontend functionality you want included.
# EXAMPLE
"""
, articleReferences =
[ { author = ""
, title = ""
, journal = ""
, year = ""
, link = ""
}
]
]
}
elmCodeRenderer : Element msg
@ -169,7 +206,7 @@ elmCodeRenderer =
[ renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 0 0 ]
, text "cardImageMaker"
, text "extractFirstWords"
|> el [ F.color syntaxTheme.key ]
, text " : "
|> el [ F.color syntaxTheme.operator ]
@ -179,18 +216,13 @@ elmCodeRenderer =
|> el [ F.color syntaxTheme.operator ]
, text "String"
|> el [ F.color syntaxTheme.keyword ]
, text " -> "
|> el [ F.color syntaxTheme.operator ]
, text "Element"
|> el [ F.color syntaxTheme.keyword ]
, text " msg"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 0 0 ]
, text "cardImageMaker"
, text "extractFirstWords"
|> el [ F.color syntaxTheme.key ]
, text " image blurb"
, text " text"
, text " ="
|> el [ F.color syntaxTheme.operator ]
]
@ -203,45 +235,115 @@ elmCodeRenderer =
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "mobileImageSize"
, text "words"
, text " ="
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "["
|> el [ F.color syntaxTheme.punctuation ]
, text " E"
, text "text"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "|>"
|> el [ F.color syntaxTheme.operator ]
, text " String"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "width"
, text " <| "
|> el [ F.color syntaxTheme.operator ]
, text "px"
, text " 45"
, text "split"
, text " "
|> el [ F.color syntaxTheme.string ]
, text "\""
|> el [ F.color syntaxTheme.string ]
, text " "
|> el [ F.color syntaxTheme.string ]
, text "\""
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " E"
|> el [ paddingXY 64 0 ]
, text "|>"
|> el [ F.color syntaxTheme.operator ]
, text " List"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "height"
, text " <| "
, text "filter"
, text " ("
|> el [ F.color syntaxTheme.punctuation ]
, text "not"
, text " << "
|> el [ F.color syntaxTheme.operator ]
, text "String"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "isEmpty"
, text ")"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "truncatedWords"
, text " ="
|> el [ F.color syntaxTheme.operator ]
, text "px"
, text " 45"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "]"
, text "List"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "take"
, text " 80"
|> el [ F.color syntaxTheme.string ]
, text " words"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "wasTextTruncated"
, text " ="
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "List"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "length"
, text " words"
, text " > "
|> el [ F.color syntaxTheme.operator ]
, text "80"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "result"
, text " ="
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "String"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "join"
, text " "
|> el [ F.color syntaxTheme.string ]
, text "\""
|> el [ F.color syntaxTheme.string ]
, text " "
|> el [ F.color syntaxTheme.string ]
, text "\""
|> el [ F.color syntaxTheme.string ]
, text " truncatedWords"
]
, renderCodeLine syntaxTheme
[ text ""
@ -252,311 +354,34 @@ elmCodeRenderer =
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 16 0 ]
, text "el"
, text "if"
|> el [ F.color syntaxTheme.keyword ]
, text " wasTextTruncated"
, text " then"
|> el [ F.color syntaxTheme.keyword ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "["
|> el [ F.color syntaxTheme.punctuation ]
, text " alignRight"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " alignTop"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " padding"
, text " 10"
, text "result"
, text " ++ "
|> el [ F.color syntaxTheme.operator ]
, text "\""
|> el [ F.color syntaxTheme.string ]
, text "..."
|> el [ F.color syntaxTheme.string ]
, text "\""
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "]"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 16 0 ]
, text "<|"
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "el"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "["
|> el [ F.color syntaxTheme.punctuation ]
, text " D"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "rounded"
, text " 100"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " D"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "width"
, text " 5"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " glowDeepDarkGrey"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " D"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "color"
, text " colourTheme"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "backgroundDarkGrey"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " B"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "color"
, text " colourTheme"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "backgroundDarkGrey"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "]"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 32 0 ]
, text "<|"
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 48 0 ]
, text "E"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "image"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "("
|> el [ F.color syntaxTheme.punctuation ]
, text "["
|> el [ F.color syntaxTheme.punctuation ]
, text " alignRight"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " alignTop"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " D"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "rounded"
, text " 100"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " clip"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "]"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "++"
|> el [ F.color syntaxTheme.operator ]
, text " ("
|> el [ F.color syntaxTheme.punctuation ]
, text "case"
|> el [ F.color syntaxTheme.keyword ]
, text " ("
|> el [ F.color syntaxTheme.punctuation ]
, text " device"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "class"
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " device"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "orientation"
, text " )"
|> el [ F.color syntaxTheme.punctuation ]
, text " of"
, text "else"
|> el [ F.color syntaxTheme.keyword ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 80 0 ]
, text "("
|> el [ F.color syntaxTheme.punctuation ]
, text " Phone"
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " Portrait"
, text " )"
|> el [ F.color syntaxTheme.punctuation ]
, text " ->"
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 96 0 ]
, text "mobileImageSize"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 80 0 ]
, text "("
|> el [ F.color syntaxTheme.punctuation ]
, text " Tablet"
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " Portrait"
, text " )"
|> el [ F.color syntaxTheme.punctuation ]
, text " ->"
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 96 0 ]
, text "mobileImageSize"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 80 0 ]
, text "_"
, text " ->"
|> el [ F.color syntaxTheme.operator ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 96 0 ]
, text "["
|> el [ F.color syntaxTheme.punctuation ]
, text " E"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "width"
, text " <| "
|> el [ F.color syntaxTheme.operator ]
, text "px"
, text " 90"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 96 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " E"
, text "."
|> el [ F.color syntaxTheme.punctuation ]
, text "height"
, text " <| "
|> el [ F.color syntaxTheme.operator ]
, text "px"
, text " 90"
|> el [ F.color syntaxTheme.string ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 96 0 ]
, text "]"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ")"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ")"
|> el [ F.color syntaxTheme.punctuation ]
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "{"
|> el [ F.color syntaxTheme.punctuation ]
, text " src"
, text " = "
|> el [ F.color syntaxTheme.operator ]
, text "image"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text ","
|> el [ F.color syntaxTheme.punctuation ]
, text " description"
, text " = "
|> el [ F.color syntaxTheme.operator ]
, text "blurb"
]
, renderCodeLine syntaxTheme
[ text ""
|> el [ paddingXY 64 0 ]
, text "}"
|> el [ F.color syntaxTheme.punctuation ]
|> el [ paddingXY 32 0 ]
, text "result"
]
]

View file

@ -1,5 +1,6 @@
module Pages.Services.Nix exposing (Model, Msg, page)
import Config.Helpers.Articles.Article exposing (contentList)
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C
import Config.Helpers.Format exposing (..)
@ -13,6 +14,7 @@ import Config.Helpers.Response
import Config.Helpers.ServiceFormat exposing (..)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Services.Records.NixBuilds exposing (servicesNixBuilds)
import Config.Style.Colour.Helpers exposing (..)
import Config.Style.Colour.Types exposing (..)
@ -124,27 +126,62 @@ elmBuildsList device =
List.concat
[ List.map
(\service ->
cardMaker device (C.ServicePage service) contentList
cardMaker device
(C.BlogArticle service)
(contentList service
[ nixCodeRenderer ]
)
)
[ servicesNixBuilds ]
[ nixBuilds ]
]
contentList : List (Element msg)
contentList =
[ column
bodyFormat
[ chunkMaker servicesNixBuilds.serviceArticle.articleParagraph.paragraph1
, chunkMaker servicesNixBuilds.serviceArticle.articleParagraph.paragraph2
, chunkMaker servicesNixBuilds.serviceArticle.articleParagraph.paragraph3
, titleMaker servicesNixBuilds.serviceArticle.articleTitles.title1
, numberMaker servicesNixBuilds.serviceArticle.articleListEntries.list1
, titleMaker servicesNixBuilds.serviceArticle.articleTitles.title2
, bulletPointMaker servicesNixBuilds.serviceArticle.articleListEntries.list2
, titleMaker servicesNixBuilds.serviceArticle.articleTitles.title3
, nixCodeRenderer
nixBuilds : BlogArticle
nixBuilds =
{ articleName = String.toUpper "Nix Builds"
, articleLink = ""
, articleAuthor = ""
, isNewTabLink = False
, hasReferences = False
, hasTableOfContents = False
, articleImage = ""
, articlePublished = ""
, articleBody = """
NixOS has become popular in my community, with many people choosing to explore it over Windows, MacOS, and other Linux distributions. Naturally, as a consequence of this, I receive numerous requests for help regarding the Nix programming language and NixOS system configuration. So, to fast-track newcomers and to make my life a little bit easier for both of us, I'm offering to build custom NixOS configurations for interested clients.
If you're interested in having a custom Nix configuration, or having a pre-existing configuration refactored, please inquire at nick@upRootNutrition.com.
Below is an example of a nix flake that I wrote for the devshell that I used to manage and isolate the development environment for this site. All of the packages, pre-defined settings, and tooling used for this site are managed through this flake.
The source code for my Nix server is viewable on [Gitlab](https://gitlab.com/upRootNutrition/dotfiles).
# WHAT YOU GET
1. A NixOS configuration written to your specifications.
2. Two refactors for the purposes of improving readability.
3. Instructions for how to use and build upon your configuration.
# REQUIREMENTS
A comprehensive list of packages you'd like included.
A list of configuration architecture specifications.
Any bespoke configuration you want included.
# EXAMPLE
"""
, articleReferences =
[ { author = ""
, title = ""
, journal = ""
, year = ""
, link = ""
}
]
]
}
renderCodeLine : SyntaxColors -> List (Element msg) -> Element msg

View file

@ -1,5 +1,6 @@
module Pages.Services.Nutrition exposing (Model, Msg, page)
import Config.Helpers.Articles.Article exposing (contentList)
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C
import Config.Helpers.Format exposing (..)
@ -14,6 +15,7 @@ import Config.Helpers.Response
import Config.Helpers.ServiceFormat exposing (..)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Services.Records.NutritionScience exposing (servicesNutritionScience)
import Config.Style.Colour.Helpers exposing (colourTheme)
import Config.Style.Transitions
@ -124,22 +126,54 @@ nutritionList device =
List.concat
[ List.map
(\service ->
cardMaker device (C.ServicePage service) contentList
cardMaker device
(C.BlogArticle service)
(contentList service
[ el
[ paddingXY 0 10
, centerX
]
<|
buyButton "Book!" "https://buy.stripe.com/5kA5lz77pdJq6J28wz"
]
)
)
[ servicesNutritionScience ]
[ nutritionQA ]
]
contentList : List (Element msg)
contentList =
[ column
bodyFormat
[ chunkMaker servicesNutritionScience.serviceArticle.articleParagraph.paragraph1
, chunkMaker servicesNutritionScience.serviceArticle.articleParagraph.paragraph2
, titleMaker servicesNutritionScience.serviceArticle.articleTitles.title1
, numberMaker servicesNutritionScience.serviceArticle.articleListEntries.list1
, titleMaker servicesNutritionScience.serviceArticle.articleTitles.title2
, bulletPointMaker servicesNutritionScience.serviceArticle.articleListEntries.list2
, buyButton "Book!" "https://buy.stripe.com/5kA5lz77pdJq6J28wz"
nutritionQA : BlogArticle
nutritionQA =
{ articleName = String.toUpper "Nutrition Q&A"
, articleLink = ""
, articleAuthor = ""
, isNewTabLink = False
, hasReferences = False
, hasTableOfContents = False
, articleImage = ""
, articlePublished = ""
, articleBody = """
This service is designed to help those interested in honing their nutrition science knowledge and boosting their intuition when reading nutrition science literature. Whether the client's goals are to achieve their academic ambitions, satisfy their personal curiosity, or improve their empirical debate chops. The client is free to guide the session in any direction they choose, so long as it is relevant to nutrition science.
# BENEFITS
1. One hour to ask me anything about nutrition science.
2. Access to nutrition science evaluation cheat sheets.
3. Sharper nutrition science critical appraisal skills.
# REQUIREMENTS
A list of five clear questions related to nutrition science.
"""
, articleReferences =
[ { author = ""
, title = ""
, journal = ""
, year = ""
, link = ""
}
]
]
}