mirror of
https://github.com/avinal/avinal.github.io.git
synced 2026-07-04 07:40:09 +05:30
@@ -8,6 +8,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"direct": {
|
"direct": {
|
||||||
"MaybeJustJames/yaml": "2.1.2",
|
"MaybeJustJames/yaml": "2.1.2",
|
||||||
|
"NoRedInk/elm-json-decode-pipeline": "1.0.1",
|
||||||
"elm/browser": "1.0.2",
|
"elm/browser": "1.0.2",
|
||||||
"elm/core": "1.0.5",
|
"elm/core": "1.0.5",
|
||||||
"elm/html": "1.0.0",
|
"elm/html": "1.0.0",
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ type alias Model =
|
|||||||
, generating : Bool
|
, generating : Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cellSize : Int
|
cellSize : Int
|
||||||
cellSize =
|
cellSize =
|
||||||
10
|
10
|
||||||
|
|||||||
+147
-39
@@ -1,35 +1,148 @@
|
|||||||
module Pages.Pages.AboutMe exposing (page)
|
module Pages.Pages.AboutMe exposing (Model, Msg, page)
|
||||||
|
|
||||||
|
import Components.Footer exposing (footerLinksToSide)
|
||||||
|
import Effect exposing (Effect)
|
||||||
import Html exposing (Html)
|
import Html exposing (Html)
|
||||||
import Html.Attributes exposing (class, datetime, href)
|
import Html.Attributes exposing (class, datetime, href, src)
|
||||||
import Utils.Constants exposing (Job, jobList)
|
import Http
|
||||||
|
import Page exposing (Page)
|
||||||
|
import Route exposing (Route)
|
||||||
|
import Shared
|
||||||
|
import Utils.JsonResume exposing (Education, Resume, Work, resumeDecoder)
|
||||||
import Utils.Utils exposing (getFormattedDate)
|
import Utils.Utils exposing (getFormattedDate)
|
||||||
import View exposing (View)
|
import View exposing (View)
|
||||||
import Components.Footer exposing (footerLinksToSide)
|
import Components.Footer exposing (iconLinkToCenter)
|
||||||
|
|
||||||
|
|
||||||
page : View msg
|
page : Shared.Model -> Route () -> Page Model Msg
|
||||||
page =
|
page _ _ =
|
||||||
|
Page.new
|
||||||
|
{ init = init
|
||||||
|
, update = update
|
||||||
|
, view = view
|
||||||
|
, subscriptions = subscriptions
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- INIT
|
||||||
|
|
||||||
|
|
||||||
|
type alias Model =
|
||||||
|
{ resume : Maybe Resume
|
||||||
|
, error : Maybe String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
init : () -> ( Model, Effect Msg )
|
||||||
|
init () =
|
||||||
|
let
|
||||||
|
cmd : Cmd Msg
|
||||||
|
cmd =
|
||||||
|
Http.get
|
||||||
|
{ url = "/resume/resume.json"
|
||||||
|
, expect = Http.expectJson GotResume resumeDecoder
|
||||||
|
}
|
||||||
|
in
|
||||||
|
( { resume = Nothing, error = Nothing }, Effect.sendCmd cmd )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- UPDATE
|
||||||
|
|
||||||
|
|
||||||
|
type Msg
|
||||||
|
= GotResume (Result Http.Error Resume)
|
||||||
|
|
||||||
|
|
||||||
|
update : Msg -> Model -> ( Model, Effect Msg )
|
||||||
|
update msg model =
|
||||||
|
case msg of
|
||||||
|
GotResume (Ok resume) ->
|
||||||
|
( { model | resume = Just resume }, Effect.none )
|
||||||
|
|
||||||
|
GotResume (Err err) ->
|
||||||
|
( { model | error = Just (Utils.Utils.errorToString err) }, Effect.none )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- SUBSCRIPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
subscriptions : Model -> Sub Msg
|
||||||
|
subscriptions model =
|
||||||
|
Sub.none
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- VIEW
|
||||||
|
|
||||||
|
|
||||||
|
view : Model -> View msg
|
||||||
|
view model =
|
||||||
{ title = "About Me"
|
{ title = "About Me"
|
||||||
, body =
|
, body =
|
||||||
|
let
|
||||||
|
experience : List Work -> Html msg
|
||||||
|
experience workList =
|
||||||
|
Html.ol [ class "relative border-l border-cyan-700" ]
|
||||||
|
(List.map
|
||||||
|
(\work ->
|
||||||
|
Html.li [ class "mb-10 ml-6 " ]
|
||||||
|
[ Html.span [ class "absolute flex items-center justify-center w-6 h-6 bg-pink-600 ring-pink-900 rounded-full -left-3 ring-8" ]
|
||||||
|
[ Html.text <| String.left 1 work.name ]
|
||||||
|
, Html.h3 [ class "flex items-center mb-1 text-xl font-semibold" ] [ Html.text <| work.position ++ " at " ++ work.name ]
|
||||||
|
, Html.time [ class "block mb-2 text font-normal leading-none text-gray-500", datetime work.startDate ]
|
||||||
|
[ Html.text <| getFormattedDate work.startDate False ++ " - " ++ getFormattedDate work.endDate False ]
|
||||||
|
, Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text work.summary ]
|
||||||
|
, Html.p [ class "mb-4 text-lg font-normal text-gray-300" ] [ Html.text work.description ]
|
||||||
|
, Html.p [ class "mb-4 text-lg font-normal text-gray-300 ml-8" ] [ listThings work.highlights ]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
workList
|
||||||
|
)
|
||||||
|
|
||||||
|
education : List Education -> Html msg
|
||||||
|
education eduList =
|
||||||
|
Html.ol [ class "relative border-l border-cyan-700" ]
|
||||||
|
(List.map
|
||||||
|
(\edu ->
|
||||||
|
Html.li [ class "mb-10 ml-6" ]
|
||||||
|
[ Html.span [ class "absolute flex items-center justify-center w-6 h-6 bg-pink-600 ring-pink-900 rounded-full -left-3 ring-8" ]
|
||||||
|
[ Html.text <| String.left 1 edu.institution ]
|
||||||
|
, Html.h3 [ class "flex items-center mb-1 text-2xl font-semibold" ] [ Html.text <| edu.studyType ++ " at " ++ edu.institution ]
|
||||||
|
, Html.time [ class "block mb-2 text font-normal leading-none text-gray-500", datetime edu.startDate ]
|
||||||
|
[ Html.text <| getFormattedDate edu.startDate False ++ " - " ++ getFormattedDate edu.endDate False ]
|
||||||
|
, Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text edu.area ]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
eduList
|
||||||
|
)
|
||||||
|
in
|
||||||
|
case model.resume of
|
||||||
|
Just resume ->
|
||||||
[ Html.section []
|
[ Html.section []
|
||||||
[ Html.div [ class "text-white py-8" ]
|
[ Html.div [ class "text-white" ]
|
||||||
[ Html.div [ class "container mx-auto flex flex-col items-start md:flex-row my-12 md:my-24" ]
|
[ Html.div [ class "container mx-auto flex flex-col items-start xl:flex-row my-12 xl:my-24" ]
|
||||||
[ Html.div [ class "flex flex-col w-full sticky md:top-36 lg:w-1/3 mt-2 md:mt-12 px-8" ]
|
[ Html.div [ class "flex flex-col w-full sticky xl:top-36 xl:w-2/3 mt-2 xl:mt-12 px-8" ]
|
||||||
[ Html.p [ class "text-lg ml-2 text-cyan-500 uppercase tracking-lppse" ] [ Html.text "Software Engineer" ]
|
[ Html.img [ class "w-full h-80 object-cover mx-auto mb-4", src resume.basics.image ] []
|
||||||
, Html.p [ class "text-3xl md:text-6xl leading-normal md:leading-relaxed mb-2" ] [ Html.text "Avinal Kumar" ]
|
, Html.p [ class "text-5xl lg:text-6xl 2xl:text-7xl leading-normal md:leading-relaxed" ] [ Html.text resume.basics.name ]
|
||||||
, Html.p [ class "md:text-base text-gray-50 mb-4 text-xl " ] [ Html.text description ]
|
, Html.p [ class "lg:text-xl md:text-md text-base text-cyan-500 uppercase tracking-lppse mb-2" ] [ Html.text resume.basics.label ]
|
||||||
, Html.a
|
, Html.p [ class "md:text-base text-gray-50 mb-4 lg:text-xl" ] [ Html.text resume.basics.summary ]
|
||||||
[ class "bg-transparent mr-auto hover:bg-pink-600 text-cyan-500 hover:text-white rounded border py-2 px-4 border-cyan-500"
|
, iconLinkToCenter
|
||||||
, href "https://docs.google.com/document/d/1uoCxH9UvWwzFRtuJQ40MJ4kNxVT0tDnHguY7OQOKkN4/edit?usp=sharing"
|
|
||||||
]
|
]
|
||||||
[ Html.text "Download CV" ]
|
, Html.div [ class "flex-row" ]
|
||||||
]
|
[ Html.div [ class "ml-0 md:ml-12 lg:w-3/3 sticky" ]
|
||||||
, Html.div [ class "ml-0 md:ml-12 lg:w-2/3 sticky" ]
|
|
||||||
[ Html.div [ class "container mx-auto w-full h-full" ]
|
[ Html.div [ class "container mx-auto w-full h-full" ]
|
||||||
[ Html.div [ class "relative wrap overflow-hidden p-10 h-full" ]
|
[ Html.div [ class "relative wrap overflow-hidden p-10 h-full" ]
|
||||||
[ Html.ol [ class "relative border-l border-cyan-700" ]
|
[ experience resume.work ]
|
||||||
(List.map jobListing jobList)
|
]
|
||||||
|
]
|
||||||
|
, Html.div [ class "ml-0 md:ml-12 lg:w-3/3 sticky" ]
|
||||||
|
[ Html.div [ class "container mx-auto w-full h-full" ]
|
||||||
|
[ Html.h2 [ class "text-xl ml-2 text-cyan-500" ] [ Html.text "Education" ]
|
||||||
|
, Html.div [ class "relative wrap overflow-hidden p-10 h-full" ]
|
||||||
|
[ education resume.education ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -38,27 +151,22 @@ page =
|
|||||||
]
|
]
|
||||||
, footerLinksToSide
|
, footerLinksToSide
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
description : String
|
|
||||||
description =
|
-- simply list things
|
||||||
"""
|
|
||||||
I am a Software Engineer Associate at Red Hat, specialising in hybrid cloud engineering.
|
|
||||||
I have been involved with Google's Summer of Code and Google Season of Docs programmes as a mentor and contributor to Open Source for many years.
|
|
||||||
For fun, I like to play around with cutting-edge areas of computer science; at the moment, I'm learning about Elm.
|
|
||||||
GNU/Linux and free/open-source software are two of my favourite things
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
jobListing : Job msg -> Html msg
|
listThings : List String -> Html msg
|
||||||
jobListing job =
|
listThings things =
|
||||||
Html.li [ class "mb-10 ml-6" ]
|
Html.ul []
|
||||||
[ Html.span [ class "absolute flex items-center justify-center w-6 h-6 bg-pink-600 ring-pink-900 rounded-full -left-3 ring-8" ]
|
(List.map
|
||||||
[ Html.text <| String.left 1 job.company
|
(\thing ->
|
||||||
]
|
Html.li [ class "list-disc" ] [ Html.text thing ]
|
||||||
, Html.h3 [ class "flex items-center mb-1 text-xl font-semibold" ] [ Html.text <| job.title ++ " at " ++ job.company ]
|
)
|
||||||
, Html.time [ class "block mb-2 text font-normal leading-none text-gray-500", datetime job.from ]
|
things
|
||||||
[ Html.text <| getFormattedDate job.from False ++ " - " ++ getFormattedDate job.to False ]
|
)
|
||||||
, job.body
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ module Utils.Constants exposing (..)
|
|||||||
|
|
||||||
import Array exposing (Array)
|
import Array exposing (Array)
|
||||||
import Html exposing (Html)
|
import Html exposing (Html)
|
||||||
import Html.Attributes exposing (class)
|
|
||||||
|
|
||||||
|
|
||||||
type alias Link =
|
type alias Link =
|
||||||
@@ -45,71 +44,6 @@ iconLinks =
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
jobList : List (Job msg)
|
|
||||||
jobList =
|
|
||||||
[ { title = "Associate Software Engineer"
|
|
||||||
, company = "Red Hat"
|
|
||||||
, from = "2022-07-01T10:10:00"
|
|
||||||
, to = "Present"
|
|
||||||
, body = Html.div [] [ Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Working on Tekton Results and Pipeline Service." ] ]
|
|
||||||
}
|
|
||||||
, { title = "Google Summer of Code Mentor"
|
|
||||||
, company = "FOSSology"
|
|
||||||
, from = "2022-05-01T10:10:00"
|
|
||||||
, to = "Parent"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Mentoring Google Summer of Code contributors for The FOSSology Project." ]
|
|
||||||
}
|
|
||||||
, { title = "Software Engineering Intern"
|
|
||||||
, company = "Red Hat"
|
|
||||||
, from = "2022-01-05T10:10:00"
|
|
||||||
, to = "2022-06-30T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Worked on Pipeline Service and Minimal Tekton Server." ]
|
|
||||||
}
|
|
||||||
, { title = "Technical Writer"
|
|
||||||
, company = "API7.ai"
|
|
||||||
, from = "2022-02-01T10:10:00"
|
|
||||||
, to = "2022-07-31T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Created Katacoda tutorials for Apache APISIX, a cloud-native API gateway." ]
|
|
||||||
}
|
|
||||||
, { title = "Open Source Contributor"
|
|
||||||
, company = "FOSSology"
|
|
||||||
, from = "2021-05-15T10:10:00"
|
|
||||||
, to = "2021-09-23T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Upgraded old build system to CMake and improved tests and CI/CD for FOSSology." ]
|
|
||||||
}
|
|
||||||
, { title = "Java Developer Intern"
|
|
||||||
, company = "XResearch"
|
|
||||||
, from = "2021-03-01T10:10:00"
|
|
||||||
, to = "2021-05-15T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "" ]
|
|
||||||
}
|
|
||||||
, { title = "Technical Writer"
|
|
||||||
, company = "VideoLAN"
|
|
||||||
, from = "2020-09-15T10:10:00"
|
|
||||||
, to = "2020-11-30T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text "Created Mobile App user documentation for VLC Media Player." ]
|
|
||||||
}
|
|
||||||
, { title = "Hindi Editor"
|
|
||||||
, company = "SRIJAN, NIT Hamirpur"
|
|
||||||
, from = "2018-11-01T10:10:00"
|
|
||||||
, to = "2022-09-30T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] []
|
|
||||||
}
|
|
||||||
, { title = "Member"
|
|
||||||
, company = "Computer Science Engineers' Society, NIT Hamirpur"
|
|
||||||
, from = "2019-01-07T10:10:00"
|
|
||||||
, to = "2022-06-30T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] []
|
|
||||||
}
|
|
||||||
, { title = "Computer Science and Engineering"
|
|
||||||
, company = "National Institute of Technology Hamirpur"
|
|
||||||
, from = "2018-06-20T10:10:00"
|
|
||||||
, to = "2022-05-31T10:10:00"
|
|
||||||
, body = Html.p [ class "mb-4 text-base font-normal text-gray-400" ] []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
months : Array String
|
months : Array String
|
||||||
months =
|
months =
|
||||||
Array.fromList
|
Array.fromList
|
||||||
|
|||||||
@@ -0,0 +1,435 @@
|
|||||||
|
module Utils.JsonResume exposing (..)
|
||||||
|
|
||||||
|
import Json.Decode as Decode exposing (Decoder)
|
||||||
|
import Json.Decode.Pipeline exposing (optional, required)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Main Resume type
|
||||||
|
|
||||||
|
|
||||||
|
type alias Resume =
|
||||||
|
{ basics : Basics
|
||||||
|
, work : List Work
|
||||||
|
, volunteer : List Volunteer
|
||||||
|
, education : List Education
|
||||||
|
, awards : List Award
|
||||||
|
, certificates : List Certificate
|
||||||
|
, publications : List Publication
|
||||||
|
, skills : List Skill
|
||||||
|
, languages : List Language
|
||||||
|
, interests : List Interest
|
||||||
|
, references : List Reference
|
||||||
|
, projects : List Project
|
||||||
|
, meta : Meta
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Basics
|
||||||
|
|
||||||
|
|
||||||
|
type alias Basics =
|
||||||
|
{ name : String
|
||||||
|
, label : String
|
||||||
|
, image : String
|
||||||
|
, email : String
|
||||||
|
, phone : String
|
||||||
|
, url : String
|
||||||
|
, summary : String
|
||||||
|
, location : Location
|
||||||
|
, profiles : List Profile
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Location =
|
||||||
|
{ address : String
|
||||||
|
, postalCode : String
|
||||||
|
, city : String
|
||||||
|
, countryCode : String
|
||||||
|
, region : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Profile =
|
||||||
|
{ network : String
|
||||||
|
, username : String
|
||||||
|
, url : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Work
|
||||||
|
|
||||||
|
|
||||||
|
type alias Work =
|
||||||
|
{ name : String
|
||||||
|
, location : String
|
||||||
|
, description : String
|
||||||
|
, position : String
|
||||||
|
, url : String
|
||||||
|
, startDate : String
|
||||||
|
, endDate : String
|
||||||
|
, summary : String
|
||||||
|
, highlights : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Volunteer
|
||||||
|
|
||||||
|
|
||||||
|
type alias Volunteer =
|
||||||
|
{ organization : String
|
||||||
|
, position : String
|
||||||
|
, url : String
|
||||||
|
, startDate : String
|
||||||
|
, endDate : String
|
||||||
|
, summary : String
|
||||||
|
, highlights : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Education
|
||||||
|
|
||||||
|
|
||||||
|
type alias Education =
|
||||||
|
{ institution : String
|
||||||
|
, url : String
|
||||||
|
, area : String
|
||||||
|
, studyType : String
|
||||||
|
, startDate : String
|
||||||
|
, endDate : String
|
||||||
|
, score : String
|
||||||
|
, courses : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Awards
|
||||||
|
|
||||||
|
|
||||||
|
type alias Award =
|
||||||
|
{ title : String
|
||||||
|
, date : String
|
||||||
|
, awarder : String
|
||||||
|
, summary : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Certificates
|
||||||
|
|
||||||
|
|
||||||
|
type alias Certificate =
|
||||||
|
{ name : String
|
||||||
|
, date : String
|
||||||
|
, url : String
|
||||||
|
, issuer : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Publications
|
||||||
|
|
||||||
|
|
||||||
|
type alias Publication =
|
||||||
|
{ name : String
|
||||||
|
, publisher : String
|
||||||
|
, releaseDate : String
|
||||||
|
, url : String
|
||||||
|
, summary : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Skills
|
||||||
|
|
||||||
|
|
||||||
|
type alias Skill =
|
||||||
|
{ name : String
|
||||||
|
, level : String
|
||||||
|
, keywords : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Languages
|
||||||
|
|
||||||
|
|
||||||
|
type alias Language =
|
||||||
|
{ language : String
|
||||||
|
, fluency : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Interests
|
||||||
|
|
||||||
|
|
||||||
|
type alias Interest =
|
||||||
|
{ name : String
|
||||||
|
, keywords : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- References
|
||||||
|
|
||||||
|
|
||||||
|
type alias Reference =
|
||||||
|
{ name : String
|
||||||
|
, reference : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Projects
|
||||||
|
|
||||||
|
|
||||||
|
type alias Project =
|
||||||
|
{ name : String
|
||||||
|
, description : String
|
||||||
|
, highlights : List String
|
||||||
|
, keywords : List String
|
||||||
|
, startDate : String
|
||||||
|
, endDate : String
|
||||||
|
, url : String
|
||||||
|
, roles : List String
|
||||||
|
, entity : String
|
||||||
|
, type_ : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Meta
|
||||||
|
|
||||||
|
|
||||||
|
type alias Meta =
|
||||||
|
{ canonical : String
|
||||||
|
, version : String
|
||||||
|
, lastModified : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- JSON Decoders
|
||||||
|
-- Resume Decoder
|
||||||
|
|
||||||
|
|
||||||
|
resumeDecoder : Decoder Resume
|
||||||
|
resumeDecoder =
|
||||||
|
Decode.succeed Resume
|
||||||
|
|> required "basics" basicsDecoder
|
||||||
|
|> required "work" (Decode.list workDecoder)
|
||||||
|
|> optional "volunteer" (Decode.list volunteerDecoder) []
|
||||||
|
|> required "education" (Decode.list educationDecoder)
|
||||||
|
|> optional "awards" (Decode.list awardDecoder) []
|
||||||
|
|> optional "certificates" (Decode.list certificateDecoder) []
|
||||||
|
|> optional "publications" (Decode.list publicationDecoder) []
|
||||||
|
|> optional "skills" (Decode.list skillDecoder) []
|
||||||
|
|> optional "languages" (Decode.list languageDecoder) []
|
||||||
|
|> optional "interests" (Decode.list interestDecoder) []
|
||||||
|
|> optional "references" (Decode.list referenceDecoder) []
|
||||||
|
|> optional "projects" (Decode.list projectDecoder) []
|
||||||
|
|> optional "meta" metaDecoder (Meta "" "" "")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Basics Decoder
|
||||||
|
|
||||||
|
|
||||||
|
basicsDecoder : Decoder Basics
|
||||||
|
basicsDecoder =
|
||||||
|
Decode.succeed Basics
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "label" Decode.string
|
||||||
|
|> optional "image" Decode.string ""
|
||||||
|
|> required "email" Decode.string
|
||||||
|
|> optional "phone" Decode.string ""
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|> required "summary" Decode.string
|
||||||
|
|> optional "location" locationDecoder (Location "" "" "" "" "")
|
||||||
|
|> optional "profiles" (Decode.list profileDecoder) []
|
||||||
|
|
||||||
|
|
||||||
|
locationDecoder : Decoder Location
|
||||||
|
locationDecoder =
|
||||||
|
Decode.succeed Location
|
||||||
|
|> optional "address" Decode.string ""
|
||||||
|
|> optional "postalCode" Decode.string ""
|
||||||
|
|> required "city" Decode.string
|
||||||
|
|> required "countryCode" Decode.string
|
||||||
|
|> optional "region" Decode.string ""
|
||||||
|
|
||||||
|
|
||||||
|
profileDecoder : Decoder Profile
|
||||||
|
profileDecoder =
|
||||||
|
Decode.succeed Profile
|
||||||
|
|> required "network" Decode.string
|
||||||
|
|> required "username" Decode.string
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
workDecoder : Decoder Work
|
||||||
|
workDecoder =
|
||||||
|
Decode.succeed Work
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> optional "location" Decode.string ""
|
||||||
|
|> optional "description" Decode.string ""
|
||||||
|
|> required "position" Decode.string
|
||||||
|
|> optional "url" Decode.string ""
|
||||||
|
|> required "startDate" Decode.string
|
||||||
|
|> required "endDate" Decode.string
|
||||||
|
|> required "summary" Decode.string
|
||||||
|
|> optional "highlights" (Decode.list Decode.string) []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Volunteer Decoder
|
||||||
|
|
||||||
|
|
||||||
|
volunteerDecoder : Decoder Volunteer
|
||||||
|
volunteerDecoder =
|
||||||
|
Decode.succeed Volunteer
|
||||||
|
|> required "organization" Decode.string
|
||||||
|
|> required "position" Decode.string
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|> required "startDate" Decode.string
|
||||||
|
|> required "endDate" Decode.string
|
||||||
|
|> required "summary" Decode.string
|
||||||
|
|> optional "highlights" (Decode.list Decode.string) []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Education Decoder
|
||||||
|
|
||||||
|
|
||||||
|
educationDecoder : Decoder Education
|
||||||
|
educationDecoder =
|
||||||
|
Decode.succeed Education
|
||||||
|
|> required "institution" Decode.string
|
||||||
|
|> optional "url" Decode.string ""
|
||||||
|
|> required "area" Decode.string
|
||||||
|
|> required "studyType" Decode.string
|
||||||
|
|> required "startDate" Decode.string
|
||||||
|
|> required "endDate" Decode.string
|
||||||
|
|> optional "score" Decode.string ""
|
||||||
|
|> optional "courses" (Decode.list Decode.string) []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Award Decoder
|
||||||
|
|
||||||
|
|
||||||
|
awardDecoder : Decoder Award
|
||||||
|
awardDecoder =
|
||||||
|
Decode.succeed Award
|
||||||
|
|> required "title" Decode.string
|
||||||
|
|> required "date" Decode.string
|
||||||
|
|> required "awarder" Decode.string
|
||||||
|
|> required "summary" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Certificate Decoder
|
||||||
|
|
||||||
|
|
||||||
|
certificateDecoder : Decoder Certificate
|
||||||
|
certificateDecoder =
|
||||||
|
Decode.succeed Certificate
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "date" Decode.string
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|> required "issuer" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Publication Decoder
|
||||||
|
|
||||||
|
|
||||||
|
publicationDecoder : Decoder Publication
|
||||||
|
publicationDecoder =
|
||||||
|
Decode.succeed Publication
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "publisher" Decode.string
|
||||||
|
|> required "releaseDate" Decode.string
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|> required "summary" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Skill Decoder
|
||||||
|
|
||||||
|
|
||||||
|
skillDecoder : Decoder Skill
|
||||||
|
skillDecoder =
|
||||||
|
Decode.succeed Skill
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> optional "level" Decode.string ""
|
||||||
|
|> optional "keywords" (Decode.list Decode.string) []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Language Decoder
|
||||||
|
|
||||||
|
|
||||||
|
languageDecoder : Decoder Language
|
||||||
|
languageDecoder =
|
||||||
|
Decode.succeed Language
|
||||||
|
|> required "language" Decode.string
|
||||||
|
|> required "fluency" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Interest Decoder
|
||||||
|
|
||||||
|
|
||||||
|
interestDecoder : Decoder Interest
|
||||||
|
interestDecoder =
|
||||||
|
Decode.succeed Interest
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "keywords" (Decode.list Decode.string)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Reference Decoder
|
||||||
|
|
||||||
|
|
||||||
|
referenceDecoder : Decoder Reference
|
||||||
|
referenceDecoder =
|
||||||
|
Decode.succeed Reference
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "reference" Decode.string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Project Decoder
|
||||||
|
|
||||||
|
|
||||||
|
projectDecoder : Decoder Project
|
||||||
|
projectDecoder =
|
||||||
|
Decode.succeed Project
|
||||||
|
|> required "name" Decode.string
|
||||||
|
|> required "description" Decode.string
|
||||||
|
|> optional "highlights" (Decode.list Decode.string) []
|
||||||
|
|> optional "keywords" (Decode.list Decode.string) []
|
||||||
|
|> required "startDate" Decode.string
|
||||||
|
|> optional "endDate" Decode.string ""
|
||||||
|
|> required "url" Decode.string
|
||||||
|
|> optional "roles" (Decode.list Decode.string) []
|
||||||
|
|> optional "entity" Decode.string ""
|
||||||
|
|> optional "type_" Decode.string ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Meta Decoder
|
||||||
|
|
||||||
|
|
||||||
|
metaDecoder : Decoder Meta
|
||||||
|
metaDecoder =
|
||||||
|
Decode.succeed Meta
|
||||||
|
|> required "canonical" Decode.string
|
||||||
|
|> required "version" Decode.string
|
||||||
|
|> required "lastModified" Decode.string
|
||||||
+34
-1
@@ -47,7 +47,17 @@ getFormattedDate dateString time =
|
|||||||
|
|
||||||
dateParser : Parser DateTime
|
dateParser : Parser DateTime
|
||||||
dateParser =
|
dateParser =
|
||||||
succeed DateTime
|
oneOf
|
||||||
|
[ succeed Tuple.pair
|
||||||
|
|= datePart
|
||||||
|
|= optional timePart
|
||||||
|
]
|
||||||
|
|> map toDateTime
|
||||||
|
|
||||||
|
|
||||||
|
datePart : Parser ( Int, Int, Int )
|
||||||
|
datePart =
|
||||||
|
succeed (\y m d -> ( y, m, d ))
|
||||||
|= int
|
|= int
|
||||||
|. token "-"
|
|. token "-"
|
||||||
|. chompWhile (\c -> c == '0')
|
|. chompWhile (\c -> c == '0')
|
||||||
@@ -55,6 +65,11 @@ dateParser =
|
|||||||
|. token "-"
|
|. token "-"
|
||||||
|. chompWhile (\c -> c == '0')
|
|. chompWhile (\c -> c == '0')
|
||||||
|= int
|
|= int
|
||||||
|
|
||||||
|
|
||||||
|
timePart : Parser ( Int, Int )
|
||||||
|
timePart =
|
||||||
|
succeed (\h m -> ( h, m ))
|
||||||
|. token "T"
|
|. token "T"
|
||||||
|. chompWhile (\c -> c == '0')
|
|. chompWhile (\c -> c == '0')
|
||||||
|= int
|
|= int
|
||||||
@@ -65,6 +80,24 @@ dateParser =
|
|||||||
|. end
|
|. end
|
||||||
|
|
||||||
|
|
||||||
|
toDateTime : ( ( Int, Int, Int ), Maybe ( Int, Int ) ) -> DateTime
|
||||||
|
toDateTime ( ( y, m, d ), maybeTime ) =
|
||||||
|
case maybeTime of
|
||||||
|
Just ( h, min ) ->
|
||||||
|
DateTime y m d h min
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
DateTime y m d 0 0
|
||||||
|
|
||||||
|
|
||||||
|
optional : Parser a -> Parser (Maybe a)
|
||||||
|
optional parser =
|
||||||
|
oneOf
|
||||||
|
[ succeed Just |= parser
|
||||||
|
, succeed Nothing
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
categoryNtags : String -> List String -> Html msg
|
categoryNtags : String -> List String -> Html msg
|
||||||
categoryNtags category tags =
|
categoryNtags category tags =
|
||||||
Html.span [ class "flex flex-wrap py-6 space-x-2" ]
|
Html.span [ class "flex flex-wrap py-6 space-x-2" ]
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 6.6 MiB |
@@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
|
||||||
|
"basics": {
|
||||||
|
"name": "Avinal Kumar",
|
||||||
|
"label": "Open Sourcerer | Software Engineer",
|
||||||
|
"email": "ripple@avinal.space",
|
||||||
|
"url": "https://avinal.space",
|
||||||
|
"image": "/images/avinal-title.webp",
|
||||||
|
"location": {
|
||||||
|
"city": "Bengaluru",
|
||||||
|
"countryCode": "IN"
|
||||||
|
},
|
||||||
|
"summary": "I am a Software Engineer Associate at Red Hat, specialising in hybrid cloud engineering. I have been involved with Google's Summer of Code and Google Season of Docs programmes as a mentor and contributor to Open Source for many years. For fun, I like to play around with cutting-edge areas of computer science; at the moment, I'm learning about Elm. GNU/Linux and free/open-source software are two of my favourite things"
|
||||||
|
},
|
||||||
|
"work": [
|
||||||
|
{
|
||||||
|
"name": "Red Hat",
|
||||||
|
"location": "Bengaluru, IN",
|
||||||
|
"position": "Software Engineer",
|
||||||
|
"startDate": "2023-10-01",
|
||||||
|
"endDate": "Today",
|
||||||
|
"summary": "Working on Pipeline Service, Tekton Results Maintainer",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Red Hat",
|
||||||
|
"location": "Bengaluru, IN",
|
||||||
|
"position": "Associate Software Engineer",
|
||||||
|
"startDate": "2022-07-01",
|
||||||
|
"endDate": "2023-09-30",
|
||||||
|
"summary": "Pipeline Service | Tekton Results"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Red Hat",
|
||||||
|
"location": "Bengaluru, IN",
|
||||||
|
"position": "Software Engineering Intern",
|
||||||
|
"startDate": "2022-01-05",
|
||||||
|
"endDate": "2022-06-30",
|
||||||
|
"summary": "Tekton Pipelines, Minimal Tekton Server"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "API7.ai",
|
||||||
|
"location": "",
|
||||||
|
"position": "Technical Writer",
|
||||||
|
"startDate": "2022-02-01",
|
||||||
|
"endDate": "2022-07-31",
|
||||||
|
"summary": "APISIX documentation, Katacoda Scenarios"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "The FOSSology Project",
|
||||||
|
"location": "",
|
||||||
|
"startDate": "2021-05-15",
|
||||||
|
"endDate": "2021-09-23",
|
||||||
|
"position": "Open Source Contributor",
|
||||||
|
"summary": "Google Summer of Code"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "XResearch",
|
||||||
|
"position": "Java Developer Intern",
|
||||||
|
"startDate": "2021-03-01",
|
||||||
|
"endDate": "2021-05-15",
|
||||||
|
"summary": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VideoLAN",
|
||||||
|
"position": "Technical Writer",
|
||||||
|
"startDate": "2020-09-15",
|
||||||
|
"endDate": "2020-11-30",
|
||||||
|
"summary": "Google Season of Docs, VLC for Android User Documentation"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"education": [
|
||||||
|
{
|
||||||
|
"institution": "National Institute of Technology Hamirpur",
|
||||||
|
"area": "Computer Science and Engineering",
|
||||||
|
"startDate": "2018-06-20",
|
||||||
|
"endDate": "2022-05-31",
|
||||||
|
"studyType": "Bachelor of Technology"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"institution": "Sri Chaitanya Junior Kalasala",
|
||||||
|
"area": "Mathematics, Physics, Chemistry",
|
||||||
|
"studyType": "Intermediate",
|
||||||
|
"startDate": "2015-05-20",
|
||||||
|
"endDate": "2017-05-30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"institution": "Simultala Awasiya Vidyalaya",
|
||||||
|
"area": "Secondary School",
|
||||||
|
"studyType": "Metriculation",
|
||||||
|
"startDate": "2010-08-09",
|
||||||
|
"endDate": "2015-03-30"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"skills": [
|
||||||
|
{
|
||||||
|
"name": "C++"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Go"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user