feat: added interviews

This commit is contained in:
Nick 2024-11-27 01:42:58 -06:00
parent eb17ceb6c2
commit d9dccdd727
19 changed files with 654 additions and 27 deletions

View file

@ -76,7 +76,15 @@ makeDodge dodgeEntry index =
displayFallacy fallacyText =
row paragraphBoldFormat
[ column [ alignTop, width (px 165) ]
[ text "Fallacy:" |> el [ paddingEach { top = 0, right = 0, bottom = 0, left = 70 } ]
[ text "Fallacy:"
|> el
[ paddingEach
{ top = 0
, right = 0
, bottom = 0
, left = 70
}
]
]
, column [ E.width fill, alignLeft ]
[ paragraph [ F.regular ]
@ -84,11 +92,21 @@ makeDodge dodgeEntry index =
]
]
in
column (paragraphAlignLeft ++ [ spacing 3, width fill ])
column
(paragraphAlignLeft
++ [ spacing 3
, width fill
]
)
[ row
(paragraphFormat
++ [ F.size 18
, paddingEach { top = 0, bottom = 0, left = 15, right = 15 }
, paddingEach
{ top = 0
, bottom = 0
, left = 15
, right = 15
}
, E.width fill
]
)
@ -213,31 +231,24 @@ cuckMaker cuck =
, E.height <| px 115
, alignTop
, alignRight
-- , explain Debug.todo
]
[ E.image
[ alignRight
, alignTop
, D.rounded 100
, clip
, E.width <| px 90
, E.height <| px 90
[ column
[ D.rounded 100
, D.width 5
, D.color colourTheme.cardBackground
]
[ E.image
[ alignRight
, alignTop
, D.rounded 100
, clip
, E.width <| px 90
, E.height <| px 90
]
{ src = "cucks/" ++ cuck.cuckImage ++ "/" ++ cuck.cuckImage ++ ".png"
, description = cuck.cuckName
}
]
{ src = "cucks/" ++ cuck.cuckImage ++ "/" ++ cuck.cuckImage ++ ".png"
, description = cuck.cuckName
}
-- , E.image
-- [ D.rounded 100
-- , clip
-- , moveUp 107
-- , moveRight 7
-- , E.width <| px 125
-- , E.height <| px 125
-- ]
-- { src = "cucks/clownborder.png"
-- , description = cuck.cuckName
-- }
]
, column
[ E.width <| px 600 ]

View file

@ -0,0 +1,29 @@
module Interviews.Episodes.FitAndFurious exposing (..)
import Interviews.Types exposing (..)
fitAndFurious : Interview
fitAndFurious =
let
name : String
name =
"Fit and Furious"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/FitAndFuriousND"
, interviewAppearances =
[ { appearanceTitle = "Seed Oil Schooling!"
, appearanceEpisode = "51"
, appearanceLink = "https://www.youtube.com/watch?v=7I1IJSZIGm0"
, appearanceExperience = 7
, appearanceSubjects =
[ { subject = "The story behind the Nutri-Dex." }
, { subject = "Seed oil consumption and health." }
, { subject = "Natural diets versus artificial diets." }
, { subject = "Ethical veganism and Nick's diet." }
]
}
]
}

View file

@ -0,0 +1,42 @@
module Interviews.Episodes.FoolproofMastery exposing (..)
import Interviews.Types exposing (..)
foolproofMastery : Interview
foolproofMastery =
let
name : String
name =
"Foolproof Mastery"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/FoolproofMaster"
, interviewAppearances =
[ { appearanceTitle = "Seed Oils & Statistics"
, appearanceEpisode = "14"
, appearanceLink = "https://www.youtube.com/watch?v=3w0wvckA1Hw"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "Vegetable oils & health outcomes." }
, { subject = "Lipid peroxidation." }
, { subject = "Lag time to LDL oxidation." }
, { subject = "Statistical analysis." }
, { subject = "Study design" }
]
}
, { appearanceTitle = "Bizarre Nutrition Claims"
, appearanceEpisode = "15"
, appearanceLink = "https://www.youtube.com/watch?v=9k7COJgwCo4"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "Meat eating in Hong Kong." }
, { subject = "Different eating patterns." }
, { subject = "Glycine methionine ratio." }
, { subject = "Oysters as a vegan food." }
, { subject = "Nick's supplements." }
]
}
]
}

View file

@ -0,0 +1,31 @@
module Interviews.Episodes.KetogeeksPodcast exposing (..)
import Interviews.Types exposing (..)
ketoGeeksPodcast : Interview
ketoGeeksPodcast =
let
name : String
name =
"Ketogeek's Podcast"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/fmahmad88"
, interviewAppearances =
[ { appearanceTitle = "In Defense of Seed Oils and Polyunsaturated Fats"
, appearanceEpisode = "78"
, appearanceLink = "https://ketogeek.libsyn.com/in-defense-of-seed-oils-and-polyunsaturated-fats-nick-hiebert"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "How did you start getting into the seed oil debate?" }
, { subject = "What are some common claims made against seed oils?" }
, { subject = "Does PUFA cause chronic diseases like CVD and cancer?" }
, { subject = "Critique of the ancestral approach towards food and nutrition." }
, { subject = "Why and when epidemiology can be good evidence." }
, { subject = "Resources people can read regarding PUFA and health." }
]
}
]
}

View file

@ -0,0 +1,32 @@
module Interviews.Episodes.LegendaryLifePodcast exposing (..)
import Interviews.Types exposing (..)
legendaryLifePodcast : Interview
legendaryLifePodcast =
let
name : String
name =
"Legendary Life Podcast"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/ted_ryce"
, interviewAppearances =
[ { appearanceTitle = "Common Food And Nutrition Myths Debunked"
, appearanceEpisode = "391"
, appearanceLink = "https://www.legendarylifepodcast.com/391-5-common-food-and-nutrition-myths-debunked-with-nick-hiebert/c"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "The importance of identifying quality evidence." }
, { subject = "Salt doesnt cost high blood pressure?" }
, { subject = "Foods that are high in potassium." }
, { subject = "Why eating processed foods might make you fat." }
, { subject = "Western Diet Culture Mentality." }
, { subject = "Are there good foods and bad foods." }
, { subject = "Nutrient Density: Guide and Tools." }
]
}
]
}

View file

@ -0,0 +1,31 @@
module Interviews.Episodes.MarkBellsPowerProject exposing (..)
import Interviews.Types exposing (..)
markBellsPowerProject : Interview
markBellsPowerProject =
let
name : String
name =
"Mark Bell's Power Project"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/MarkSmellyBell"
, interviewAppearances =
[ { appearanceTitle = "Seed Oils Arent as Bad as You May Think"
, appearanceEpisode = "670"
, appearanceLink = "https://www.youtube.com/watch?v=omzCi2CGoxo"
, appearanceExperience = 1
, appearanceSubjects =
[ { subject = "Quick background on seed oils." }
, { subject = "How does red meat increase disease risk?" }
, { subject = "Exact health benefits of vegetable oils." }
, { subject = "Tucker Goodrich & Alan Flanagan debate review." }
, { subject = "Should you remove seed oils all together at once?" }
, { subject = "Maybe vegetable oils arent that important?" }
]
}
]
}

View file

@ -0,0 +1,43 @@
module Interviews.Episodes.MuscleMemoirsPodcast exposing (..)
import Interviews.Types exposing (..)
muscleMemoirsPodcast : Interview
muscleMemoirsPodcast =
let
name : String
name =
"Muscle Memoirs Podcast"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/MikeMurrayRD"
, interviewAppearances =
[ { appearanceTitle = "The Nutri-Dex, Misconceptions, and Optimizing Body Composition"
, appearanceEpisode = "11"
, appearanceLink = "https://www.youtube.com/watch?v=SF1BBOA5FAQ"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "The story behind the Nutri-Dex." }
, { subject = "Misconceptions about nutrient density." }
, { subject = "Using the cheat sheet to optimize body composition." }
, { subject = "Top foods that are beneficial for bodybuilding." }
, { subject = "How are the most satiating foods determined?" }
, { subject = "Nick gives some of his tops foods" }
]
}
, { appearanceTitle = "Seed Oils, Saturated Fat, and Cardiovascular Disease"
, appearanceEpisode = "82"
, appearanceLink = "https://www.youtube.com/watch?v=WfApzH4Dj3M"
, appearanceExperience = 10
, appearanceSubjects =
[ { subject = "Mechanistic arguments against seed oils." }
, { subject = "Linoleic acid consumption and heart disease." }
, { subject = "Are hunter-gatherer diets optimal for modern humans?" }
, { subject = "Saturated fat and blood lipids." }
, { subject = "Meta-analysis in nutrition." }
]
}
]
}

View file

@ -0,0 +1,32 @@
module Interviews.Episodes.SigmaNutritionRadio exposing (..)
import Interviews.Types exposing (..)
sigmaNutritionRadio : Interview
sigmaNutritionRadio =
let
name : String
name =
"Sigma Nutrition Radio"
in
{ interviewName = name
, interviewImage = formatInterviewName name
, interviewSocial = "https://x.com/NutritionDanny"
, interviewAppearances =
[ { appearanceTitle = "Micronutrients, Anti-nutrients, and Non-essential Nutrients"
, appearanceEpisode = "360"
, appearanceLink = "https://sigmanutrition.com/episode360/"
, appearanceExperience = 1
, appearanceSubjects =
[ { subject = "How best to measure nutrient density." }
, { subject = "The downsides of maximizing nutrient density." }
, { subject = "Anti-nutrients: how relevant are they?" }
, { subject = "Understanding the effect of phytate, oxalate, etc." }
, { subject = "Hard to get nutrients in typical diets." }
, { subject = "Synergistic and moderating effects of nutrients." }
, { subject = "Non-essential nutrients & importance for health." }
]
}
]
}

View file

@ -0,0 +1,217 @@
module Interviews.Helpers exposing (..)
import Config.Colour exposing (..)
import Config.Format exposing (..)
import Cuckery.Types exposing (..)
import Effect exposing (Effect)
import Element as E exposing (..)
import Element.Background as B exposing (..)
import Element.Border as D
import Element.Font as F
import Html.Attributes as H exposing (style)
import Interviews.Types exposing (..)
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Shared
import View exposing (View)
makeSubject : Subjects -> Element msg
makeSubject subjects =
column [ E.width fill, alignLeft ]
[ paragraph [ F.regular ]
[ text (" " ++ subjects.subject) ]
]
makeAppearance : Appearance -> Int -> Element msg
makeAppearance appearanceEntry index =
column
(paragraphAlignLeft
++ [ spacing 3
, width fill
]
)
[ row
(paragraphFormat
++ [ F.size 18
, paddingEach
{ top = 0
, bottom = 0
, left = 15
, right = 15
}
, E.width fill
]
)
[ text " "
, text (String.fromInt index ++ ". ")
, paragraphLinkFormat
{ url = appearanceEntry.appearanceLink
, label =
row
[ F.size 18
]
[ text ("#"++appearanceEntry.appearanceEpisode++": "++appearanceEntry.appearanceTitle)
|> el
[ F.color colourTheme.highlightText
, mouseOver [ F.color colourTheme.highlightTextHover ]
, transitionStyle
]
]
}
]
, row paragraphBoldFormat
[ column [ alignTop, width <| px 125 ]
[ text "Subjects:"
|> el
[ paddingEach
{ top = 0
, right = 0
, bottom = 0
, left = 55
}
]
]
, column
[ spacing 8
, width fill
]
<|
List.map2 (\x y -> makeSubject x)
appearanceEntry.appearanceSubjects
(List.range 1 (List.length appearanceEntry.appearanceSubjects))
]
]
interviewMaker : Interview -> Element msg
interviewMaker interview =
row
[ spacing 20
, width fill
, E.height fill
, alignTop
, alignRight
]
[ column
[ E.width <| px 115
, E.height <| px 115
, alignTop
, alignRight
]
[ column
[ D.rounded 100
, D.width 5
, D.color colourTheme.cardBackground
]
[ E.image
[ alignRight
, alignTop
, D.rounded 100
, clip
, E.width <| px 90
, E.height <| px 90
]
{ src = "interviews/" ++ interview.interviewImage ++ ".png"
, description = interview.interviewImage
}
]
]
, column
[ E.width <| px 600 ]
[ row
(nonHighlightedTitleFormat
++ [ F.size 20
, paddingEach
{ top = 6
, bottom = 3
, left = 25
, right = 15
}
, alignBottom
, width fill
, D.roundEach
{ topLeft = 26
, topRight = 15
, bottomRight = 0
, bottomLeft = 0
}
, B.gradient
{ angle = 1.5708
, steps =
[ colourTheme.highlightTextHover
, colourTheme.highlightTextHover
, colourTheme.transparent
, colourTheme.transparent
]
}
]
)
[ text interview.interviewName ]
, column
[ E.height fill
, E.width fill
-- , B.color colourTheme.cardBackground
, paddingEach
{ top = 10
, bottom = 10
, left = 10
, right = 10
}
, D.roundEach
{ topLeft = 0
, topRight = 0
, bottomRight = 0
, bottomLeft = 26
}
, spacing 3
, B.gradient
{ angle = 1.5708
, steps =
[ colourTheme.cardBackground
, colourTheme.cardBackground
, colourTheme.transparent
, colourTheme.transparent
]
}
]
[ row
(paragraphBoldFormat
++ [ F.size 18
, paddingEach
{ top = 0
, bottom = 0
, left = 15
, right = 15
}
, spacing 5
]
)
[ text "Social:"
, paragraphLinkFormat
{ url = interview.interviewSocial
, label = transitionHighlightedLinkHover <| text (formatInterviewSocial interview.interviewSocial)
}
]
, row
(paragraphBoldFormat
++ [ F.size 18
, paddingEach
{ top = 0
, bottom = 0
, left = 15
, right = 15
}
]
)
[ text "Appearances:" ]
, column [ spacing 8, width fill ] <|
List.map2 (\x y -> makeAppearance x y)
interview.interviewAppearances
(List.range 1 (List.length interview.interviewAppearances))
]
]
]

View file

@ -0,0 +1,44 @@
module Interviews.Types exposing (..)
type alias Interview =
{ interviewName : String
, interviewImage : String
, interviewSocial : String
, interviewAppearances : List Appearance
}
type alias Appearance =
{ appearanceEpisode : String
, appearanceLink : String
, appearanceTitle : String
, appearanceExperience : Int
, appearanceSubjects : List Subjects
}
type alias Subjects =
{ subject : String }
type alias FormattedInterviewName =
String
type alias FormattedInterviewSocial =
String
formatInterviewName : String -> FormattedInterviewName
formatInterviewName name =
name
|> String.toLower
|> String.replace " " ""
|> String.replace "'" ""
formatInterviewSocial : String -> FormattedInterviewSocial
formatInterviewSocial name =
name
|> String.replace "https://x.com/" "@"

View file

@ -155,7 +155,8 @@ view { toContentMsg, model, content } =
, hyperbolgButton
, argumentsButton
, cucklistButton
, communityButton
-- , communityButton
, nutridexButton
, donateButton
, interviewButton

View file

@ -0,0 +1,114 @@
module Pages.Interviews exposing (Model, Msg, page)
import Config.Colour as T exposing (..)
import Config.Format as O exposing (..)
import Config.Identity as I exposing (..)
import Effect exposing (Effect)
import Element exposing (..)
import Element.Border as D
import Element.Font as F
import Html
import Html.Attributes as H exposing (style)
import Interviews.Episodes.FitAndFurious exposing (fitAndFurious)
import Interviews.Episodes.FoolproofMastery exposing (foolproofMastery)
import Interviews.Episodes.KetogeeksPodcast exposing (ketoGeeksPodcast)
import Interviews.Episodes.LegendaryLifePodcast exposing (legendaryLifePodcast)
import Interviews.Episodes.MarkBellsPowerProject exposing (markBellsPowerProject)
import Interviews.Episodes.MuscleMemoirsPodcast exposing (muscleMemoirsPodcast)
import Interviews.Episodes.SigmaNutritionRadio exposing (sigmaNutritionRadio)
import Interviews.Helpers exposing (..)
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Shared
import View exposing (View)
page : Shared.Model -> Route () -> Page Model Msg
page shared route =
Page.new
{ init = init
, update = update
, subscriptions = subscriptions
, view = view
}
|> Page.withLayout toLayout
toLayout : Model -> Layouts.Layout Msg
toLayout model =
Layouts.Navbar {}
-- INIT
type alias Model =
{}
init : () -> ( Model, Effect Msg )
init () =
( {}
, Effect.none
)
-- UPDATE
type Msg
= NoOp
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
NoOp ->
( model
, Effect.none
)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
-- VIEW
view : Model -> View Msg
view model =
{ title = dodgersName
, attributes = []
, element = interviewContainer
}
interviewContainer : Element msg
interviewContainer =
topLevelContainer interviewList
interviewList : Element msg
interviewList =
column
pageList
<|
List.map interviewMaker
[ sigmaNutritionRadio
, markBellsPowerProject
, foolproofMastery
, ketoGeeksPodcast
, legendaryLifePodcast
, muscleMemoirsPodcast
, fitAndFurious
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB