►
From YouTube: Core Marketing Site - Javier Garcia and Tyler Williams
Description
Javier Garcia and Tyler Williams discuss the Nuxt.js repository for GitLab's Core Marketing Site. A freeform conversation that starts at a high level and explores the Slippers UI integration, build processes, and CI pipeline configuration.
Core Marketing Site handbook page: https://about.gitlab.com/handbook/marketing/inbound-marketing/digital-experience/marketing-site-rearchitecture-project/
Core Marketing Site repository: https://gitlab.com/gitlab-com/marketing/core-marketing-site
Slippers UI: https://gitlab.com/gitlab-com/marketing/inbound-marketing/slippers-ui
A
Hey
hello,
it
is
monday
august
30th
of
2021
javi,
and
I
are
going
to
talk
about
the
new
core
marketing
website
for
from
the
digital
experience
team.
Perhaps
team
name
to
be
changed.
Who
knows
yeah?
We
don't
have
an
agenda
for
this.
I'm
gonna
try
and
keep
it
like
to
the
point
and
try
not
to
like
ramble
too
much.
There's
a
lot
of
stuff
going
on.
We
haven't
pulled
up
an
agenda.
This
is
a
little
informal.
A
I
don't
want
to
make
it
too
long,
but
I
don't
know
let's,
let's
find
what's
useful.
I'm
gonna
share
my
screen
and
just
sort
of
like
drive
around
and
show
like
what
we
got
going
on.
So
this
is
the
core
marketing
site.
You
know
as
a
public
repository
as
most
of
our
projects
are
and
I'll
drop
a
link
to
it,
or
we
have
a
handbook
link
to
it,
which
is
also
in
the
repository
here.
So
at
its
core.
It
is
a
next
site.
A
So
next
is
like
a
framework
for
writing.
Vue.Js
provides
utilities
to
build
either
like
single
page
applications,
server-side
rendering
applications
or,
in
our
case
statically
generated
websites
and
we've
enabled
typescript
support.
Something
that's
good
to
know
is
that
so
typescript
support
is
enabled
it
is
preferred,
but
you
can
opt
out
of
it,
for
if
you
have
reasons
so
there
are
some
things
like
in
particular,
I
have
one
actually
more
than
one.
A
I
have
a
couple
of
plugins
that
we
need
to
use
that
are
written
as
just
plain
javascript
files,
because
it
makes
more
sense
to
keep
their
third-party
integrations
and
instead
of
spending
the
time
to
convert
the
third-party
integration
to
typescript
and
then
in
the
process
of
that
deviating
from
the
third
party
like
happy
path.
I'd
rather
just
keep
things
as
they
are,
so
the
nice
thing
is,
you
don't
have
to
write
typescript.
A
So,
if
you're
coming
to
this
from
a
non-typescript
background,
you
can
still
be
productive
and
I
think
we
should,
as
as
much
as
possible,
prefer
typescript
it
you
know,
will
prevent
us
from
making
author
time
mistakes,
as
you
know
more
so
than
if
we
didn't
use
it.
It'll
also
provide
convenient,
just
code,
completion,
stuff
and
other
tooling
there
so
where
you
can
write
typescript
if
you're
writing
javascript,
but
you
do
have
an
escape
hatch.
A
If
you
need
to
get
something
done
and
you
don't
want
to,
you
know,
learn
typescript
to
do
the
one
quick
thing
you
need
to
have
done
or
if
there's
a
good
reason
like
a
third-party
integration
that
doesn't
have
type
trip
support,
so
so
yeah,
that's
sort
of
the
the
top
level.
Here,
we've
got
a
oops
sorry,
I
didn't
mean
to
expand
that
we
have
like
a
gitlab
pages
site
specifically
for
this
you'll
notice,
actually
that
the
root-
so
maybe
here's
another
good
thing
to
talk
about,
is
like.
A
It
is
a
supplemental
website
and
it
would
be
like
almost
like
if
we
were
building
a
mono
repo,
but
for
technical
reasons
like
amano
repo
doesn't
solve
our
problems,
but
the
current
middleman
sites
all
deploy
to
the
same
google
cloud,
storage,
container,
right
and
they're
just
and
we
just
have
routing,
set
up
for
them
through
pastly,
so
the
nice
thing
is
anything
can
deploy
to
it
as
long
as
it
has
the
right
keys.
A
So
this
is
just
another
repository
that
has
its
own
ecosystem
that
deploys
to
the
same
google
cloud
bucket
because
like
it
can
because
it's
a
statically
generated
website.
So,
at
the
end
of
the
day
it
compiles
down
to
html,
css
and
javascript
and,
like
you
just
not
just
but
like
you,
can
put
it
on
any
static
file,
server
and
it'll
work.
So
it
gives
us
a
lot
of
options
and
flexibility.
A
So
the
reason
I
said
that
is,
you
can
go
to
the
the
pages
deployment
of
it,
but
we
don't
build
index.html
because
we're
not
yet
ready
to
be
serving
the
homepage
from
this.
So
right
now
I
have
a
test
page,
which
you
can
see
here.
Instead,
so
can
I
expand
this
yeah
so
yeah?
This
is
like
the
test
space.
You
have
to
go
to
like
slash
test
page
as
we
build
more
pages
they'll
become
available
here.
This
is
not
meant
to
be
like
a.
A
It
exists.
As
a
reference
point.
It's
like
hey.
You
know
we
build
something
to
somewhere,
but
it's
not
really
meant
to
be
like
a
particularly
useful
tool.
We
do
actually
have
review
applications
set
up
for
it
and
here
let
me
look
at
a
merge
request.
Let's
find
a
merged
one
review
app
yeah.
This
will
do
it,
so
you
can
actually
go
to
so
now
when
you
make
mrs
oh,
it
might
be
gone
because
this
is
an
older
branch.
A
I
did
this
a
while
ago,
so
we
have
review
apps,
enabled
and
it'll
review.
Whatever
changes
you
made
so
I'll,
stop
there
that's
a
lot,
but
there's
plenty
more
to
talk
about
javi.
Do
you
have
specific
questions
starting?
Yes,.
B
I
do
I
have
one
of
the
questions
in
particular.
Okay-
and
I
think
it
was
kind
of
like
primed
by
like
something
I
had
in
mind-
is
that
I
built
a
footer
component
with
slippers
as
and
it's
essentially
using
view
purely
based
on
templating,
I'm
not
using
it
for
any
sort
of
like
I'm,
not
using
it.
Like
a
view.
Life
cycle
at
any
point
would
a
setup
that
we
have
here.
Just
statically
render
a
footer
yep.
A
Precisely
and
that's
what
it's
doing
in
so
I'll
talk
about
two
things
about
one,
the
integration
and
then
two
what's
actually
happening.
So
a
note
we're
doing
docs
in
this
docs
folder.
If
you
go
to
the
readme,
there
is
a
note
about
it,
gitlab
documentation.
So
a
lot
of
the
readme
is
just
the
boilerplate
next
readme
and
I
want
to
just
keep
it
there
as
much
as
possible
like
and
until
it
makes
sense
for
us
to
deviate
from
the
convention.
I
will
stick
to
the
convention,
but
we
do.
A
A
I
have
to
write
a
note
about
it
and
why
I
made
that
change
right
like
like,
if
I
made
a
decision
that
next
didn't
make
for
me,
I
go
right
about
that
decision.
So
people
understand
that
I
that
it
was
made
right-
and
I
think
other
folks
should
follow
that
same.
It's
that
same
kind
of
approach.
You
know
as
much
as
generally.
A
Yeah
so
so,
there's
a
docs,
folder
docs
and
there's
a
slippers,
ui
folder,
so
there's
a
link
to
the
slippers,
ui
repository
and
we
use
typescript,
and
so
there's
a
note
about.
We
have
a
declaration
file
that
basically
says
hey.
This
is
a
module
and
it
unless
it's
handy
when
we're
talking
to
typescript,
we
can
say:
hey
this
library
doesn't
have
typings,
don't
worry
about
it,
just
hand
wave
it
away.
Just
it's
it's
nothing!
A
It's
it's,
it's
a
module,
and
so
we
pull
it
in
and
we
pull
it
in
as
a
plug-in
where,
basically
we
do
if
you've
seen
what
we've
done
on
the
middleman
site,
we
do
kind
of
the
same
thing
where
we
grab
slippers
components
from
our
package
and
then
we
register
each
component
from
slippers
ui
as
a
component.
Here
right.
We
just
register
it
to
view
there's
some
documentation
on
what
plugins
are
and
how
they
work
at
next.
But
basically,
nux
is
a
layer.
A
That's
kind
of
on
top
of
you.
Nux
says,
like
a
framework,
has
its
own
view.
Instance.
It's
like
hey,
like,
I
know
what
vue.js
the
library
is,
and
we
have
these
opportunities
and
plugins
to
like
modify
that
instance
of
vue.js,
and
so
that's
what
we're
doing
here
and
we
modify
vue.js
so
now,
vue.js
knows
about
slippers,
ui
components,
it's
just
built
into
our
instance
of
view,
which
next
is
hooking
into
here.
So
it's
like
hey.
If
I
call
slp
navigation,
I
know
what
a
component
is
right.
A
We
also
in
our
config
file,
because
slippers
ui
comes
with
its
own
styles.
We
can
we
actually
tell
next
that
it
should
grab
those
styles
as
well.
So
we
grab
that
here
right
and
then
to
answer
your
question
specifically.
So
that's
how
slippers
is
like
integrated
is
like
it's
installed
as
a
package
installed
as
a
plug-in
configured
to
grab
any
of
the
assets
we
need
from
it.
We
could
do
the
same
even
with
images.
If
we
included
them,
we
shouldn't,
but
we
could.
A
Then
you
can
just
sorry
I
try
not
to
say
yes,
then
you
can
use
components
from
slippers
ui
as
though
they
are
as
though
they
are
built-in
components
to
next.
So
this
is
our
layout
file.
We
have
one
default
layout
right
now:
it's
just
top
level
layouts
default.view,
you
use
for
layout
files
and
pages
use
view
single
file
components.
A
This
layout
gets
wrapped
around
everything.
So
you'll
see
this
nux
component
is
like
a
custom,
nux
component.
That
basically
says
whatever
nux
is
doing
put
it
inside
here,
but
we're
wrapping
it
in
like
a
little
container
div
and
we
and
I
dropped
slp
navigation,
which
is
the
slp
navigation
component.
Here
at
the
top
and
now
you'll
see
here,
here's
our
component,
oh,
I
think
I
actually
need
to.
A
A
So
when
we
generate
the
all
of
these
things
you
can
get
in
next
is
clever,
and
it
will
actually
tell
you
if
it
leaves
breadcrumbs
for
itself,
so
I
think
you
can
actually
go
into.
Oh,
maybe.
A
Oh,
you
can't
with
a
static
site
anymore.
Okay,
that's
great,
but
that's
good,
because
this
is
all
just
statically
generated.
This
is
exactly
what
we
want
it
to
be.
It's
not
a
view
component,
it's
not
rendering
client-side,
it
is
statically
generated,
and
it's
dr
oh.
I
know
why
this
is
the
build.
This
is
the
production
build
which
does.
B
B
A
Yeah
locally,
if
I
do
yarn
dev.
A
B
A
So
what
will
happen
is
in
in
development
mode.
When
you
run
yarn,
dev
is
the
command
I
ran
here.
It
will
render
it
as
the
server's
the
server
rendering
version.
A
If
you
wanted
to
check
out
what
the
statically
built
one
would
be,
it
would
be,
you
would
run
yarn
generate
so,
and
this
will
be
good
for
debugging.
So,
like
keep
in
mind,
if
you're
just
doing
yarn
dev,
you
are
in
a
very
different
environment
or
a
slightly
different
environment
than
the
production
build
will
be
in.
A
If
you
run
yarn,
generate
you'll,
get
a
production,
build
or
you'll
get
a
you'll
get
a
static,
build
that
is
similar
to
the
production,
build,
although
it'll
be
from
the
development
environment,
so
it
might
be
a
little
different
it'll
go
to
this
dist
folder,
which
is
somewhat
conventional,
and
then,
if
you
wanted
to
serve
it,
so
you
could
do
like
npx
http
server,
dist
right.
A
A
little
local
server
for
folks
who
haven't
used
it
before,
and
here
we
are
there's
no
index
page
right,
like
I
said
so,
we're
just
getting
the
plane.
But
here's
like
a
test
page
here
we
are
and
then
here
you'll
see.
This
should
look
yeah,
there's
no
view
dev
tools
here,
and
this
should
look
exactly
like
this.
So
if
you
want
to
see
the
static
build,
you
do
have
to
take
an
egg.
A
A
If
you
want
the
view
tools,
you
should
run
yarn
depth
and
that
that's
going
to
be
the
the
the
best
developer
experience
when
you're
working
locally
on
the
site,
but
if
you've
run
into
bugs
that
you're,
not
precisely
like,
if
you
get
a
bug
in
production
that
you're
not
seeing
in
development,
one
of
the
first
things
I
would
do
is
I
would
go
check
out
the
statically
generated
version
of
it
locally
and
see
if
that
helps
like
clear
up
any
confusions,
because
again
answering
your
question.
A
B
A
B
A
Yes,
it
does
have
you
done
that
in
a
different
version
of
slippers,.
A
Cool,
so
so
there's
no
way
for
us
to
get
it,
but
what
we
could
do
is
we
can
run
yarn,
upgrade
slippers
ui
to
get
the
latest
or
you
could
do
yarn
upgrade
at
a
specific
version.
Well,.
A
B
A
A
Haven't
done
it,
so
I
don't
think
we'll
actually
end
up
getting
it.
Even
if
we
get
this
most
recent
version
of
slippery's
ui
but
yeah,
the
answer
is,
it
will
become
statically
rendered.
It
won't
look
statically
rendered
in
yarn
depth
right,
but
it
would
if
we,
if
you
added
the
footer
to
the
package,
we
upgraded
it
in
next
and
then
I
did
the
thing
that
I
did
in
the
layout
file
and
added
it
here
then
ran
yarn
generate
it
would
become
statically
rendered.
You
can
opt
out
of
this.
A
A
It
used
to
be
client
only
so
if
you
had
a
component
that
needed
to
be
rendered
in
the
client
side
like
if
it
needed,
like
browser
apis
to
work
or
if
you
know
you
were
like
dynamically
loading
stuff
into
the
client,
like
whatever
reason
you
could
wrap
components
in
client
only,
but
now
they
have
no
dash
ssr,
which
is
the
thing
to
use
yeah.
A
Oh
and
here's
an
example,
I
think
this
is
like
an
older
example.
You
know,
like
let's
say
you
had
this
comments
thing.
There's
like
a
loading
indicator
right
they
just
all
they
do.
Is
they
wrap
it
in
client?
Only
and
nux
just
knows
hey
don't!
So.
A
If
you
wanted
your
footer
to
be
a
client-side
component,
I
don't
think
it
should
be,
but
if
there
was
a
good
reason
for
it,
we
could
wrap
it
in
client
dash
only
or
sorry
we
could
wrap
it
in
no
dash
ssr
and
then
nux
would
skip
generating
it,
but
it
wouldn't.
It
would
leave
what
it
needed
to
render
it
as
a
client-side
component,
yeah.
A
We
should
use
it
sparingly,
there's
not.
I
don't
think
we
have
a
ton
of
use
cases
for
things
like
that
for
this
particular
website.
So
if
you
see
no
dash
ssr,
you
should
you
know,
ask
the
question
of
like
why.
Why
does
this
need
to
be
a
client-side
component,
because
every
time
we
do
that,
we,
you
know
lose.
A
Okay,
other
things,
so
I've
talked
about
what
it
is.
We've
talked
about,
documentation,
we've
talked
about
sort
of
the
slippers
integration
and
what's
happening
there.
We've
talked
about
sort
of
the
build
steps.
You
know
the
difference
between
development
and
generating
production
does
what
yarn
generate
does,
but
it's
got
a
different
like
environment
variable,
so
we
can
switch
on
behavior
in
in
production
and
in
development
modes.
If
we
want
right
now,
there's
nothing
happening
there
other
than
it's
just
a
different
environment.
A
B
A
Yeah
there
is
so
the
first
is
thanks
again
to
chad,
wooley,
we
started
from
a
lot
of
boilerplate
that
he
had
put
together
for
static
site,
gitlab,
ci
templates.
So
a
lot
of
these
things
you
see
here,
especially
with
these.
These
comments-
are
performance
and
reliability.
Optimizations
right
that
we
can
do
since
we're
mostly
doing
static
site
generation.
A
I
had
to
deviate
a
little
bit
from
what
he
normally
had,
because
so
we
use
so
each
job
in
the
pipeline
spins
up
a
docker
instance
and
grabs
a
docker
image,
something
that's
different
about
this
website
than
what
we
have
in
the
middleman
site
in
the
middleman
site.
We
maintain
and
publish
a
custom
docker
image
for
about
doculab.com,
so
you
may
be
used
to
working
with
tools
that
don't
come
with
a
lot
of
these
images,
and
I
ran
into
this.
I
was
like,
oh,
why
don't?
A
I
have
this
tool
and
I
have
that
tool.
I
was
like
right
because
I
haven't
like
written
a
custom
docker
for
it.
I
for
a
moment
I
was
like
okay,
let's
use
the
middleman
one,
but
it
comes
with
a
bunch
of
stuff.
We
don't
need
like
ruby,
like
we
don't
need
any
ruby
here.
A
So
I
was
like
no
there's
got
to
be
a
different
way,
so
we
default
to
generally
speaking,
most
jobs
will
run
with
the
node
alpine
linux
image,
which
is
just
like
a
very
slim
version
of
a
docker
container
that
has
like
node
js
at
version
15.4,
and
it's
like
pretty
fast
to
spin
up
and
tear
down
in
other
cases.
A
So
I
had
to
split
out
a
build
step
which
uses
node
to
build,
so
it
says
like
okay,
I
have
node,
so
I
can
run
next
because
it's
all
node
generated
it's
all
node
code,
but
we
have
a
deployment
stage
so
build
stage
just
uses
default
image,
but
our
deployment
stage
needs
google
cloud
sdk,
and
the
great
thing
here
is
that
google
cloud
publishes
an
sdk
image,
but
I
needed
to
split
out
the
build
and
deployment
steps,
so
the
deployment
step
only
does
things
using
the
google
cloud.
A
Sdk
image
and
the
build
step
only
does
things
that
it
requires
node,
for
so
it's
a
little
bit
different
than
what
we're
used
to
working
with,
which
is
basically,
we
have
like
a
custom
in
in
middlemen.
We
have
a
custom
image,
that's
kind
of
like
can
do
whatever
it
needs
to
do,
because
over
time
it
is
sort
of
like
people
have
built
up
what
we
needed
we're
starting
from
a
blank
slate
here.
So
there's
nothing
that
custom
works
for
us
out
of
the
box.
A
Eventually,
we'll
probably
want
to
maintain
our
own
docker
image,
that's
specific,
but
in
this
case,
at
the
stage
we're
in
you
know
it's
a
very
bare
bones
configuration,
so
I
just
wanted
to
use
whatever's
out
of
the
box
and
that's
the
same
kind
of
deal
with
like
the
next
configuration
is
like
my
guy.
A
My
guiding
you
know
principle
here
is:
do
everything
as
standard
as
pot
like
if
there's
something
that
is
like
documented
elsewhere,
by
a
tool
like
go
with
the
conventional
documentation
unless
there's
a
really
good
reason
not
to,
and
because
we
can
accomplish
these
tasks
using
like
very
conventional
configuration
items.
I
did
that
to
start
and
we
may
find
that
eventually
we
need
our
own
custom
docker
instead,
like
our
own
docker
image
built,
but
we
don't
right
now,
yeah
so.
B
Yeah,
so
I
I
would
I
would
assert,
is
my
own
opinion
like
I
would
even
challenge
like
do
we
need?
Would
we
ever
need
a
custom
doc,
like
maybe
maybe
there's
a
good
reason
at
some
point,
but
like
yeah,
we.
A
Might
be
able
to
optimize,
we
might
be
able
to,
because
there's
some
caching
we
can
do
if
we
use
just
one
we
might
have.
We
might
have
a
complicated
job
that
needs
like
a
bunch
of
different
functionality
and
instead
of
like
giving
it
like,
because
with
docker
you
can
say
like
we
can
just
give
it
a
whole
like
linux
machine
to
do.
A
A
So
you
can
be
like
extremely
consistent
and
performant,
and
so,
if
we
had
a
job
that
needed
like
node
and
it
needed
ruby
and
it
needed
python
and
it
needed
google
sdk
and
it
needed
like
something
else
from
our
dns
provider
that
we
had
to
have
a
tool
for
like
it
might
make
a
lot
of
sense
to
publish
and
maintain
a
custom
docker
image.
Just
just
like
streamline
everything
and
keep
because,
like
basically
like
that
to
me,
is
the
instance
in
which
we
would
want
to.
A
Right
and
so
we
should
move
the
complexity
into
one
place
and
we
should
say:
hey:
look.
We
can't
get
around
this
complexity,
but
what
we
can
do
is
we
can
like
say
very
clearly
all
of
the
complexity
lives
in
our
docker
image
and
that's
where
we
manage
all
the
weirdness,
and
so,
if
you
think,
something's.
A
A
Yeah
awesome
we'll
have
more
to
talk
about
when
we've
got
pages
built,
including
deployment
stuff.
I
don't
think
it's
it's
not
particularly
relevant
because
I
don't
have
deployments
running
right
now,
so
I
don't
want
to
go
into
them
because
I
don't
even
know
one.
I
know
90
of
how
it's
gonna
work,
but
I
won't
know
it
until
it's
done
so.
B
Something
something
I
will
probably
want
to
do
is
switch
our
footer
for
the
sop
footer
in
about
so
that,
like
those
because
there's
like
slight
deviations
between
the
two
and
I
think
it
would
just
look
for
a
consistency
like
consistency
like
css
experience
like
yes,
I
feel
like
it
would
just
make
sense
to
just
have
it
all
in
one
place.
Yeah.
A
B
A
Yeah,
precisely
and
then
we
can
talk
about
it
in
there
about
whether
or
not
it
makes
sense
to
do
my
guess
is
it
will
make
sense
to
do
this.
This
is
an
easy
example,
but
there
will
be
harder
examples
where
we
find
that
certain
types
of
pages
aren't
yet
handled
by
next
and
there's
some
inconsistencies
between
them
or
like
child
pages
and
stuff,
and
we
just
will
have
to
make
some
harder
conversa
to
have
some
more
like
more
challenging
conversations
about.
A
What's
the
priority
right
and
like
what's
the
driver
to
do
it
and
that's
you
know
a
bigger
strategy
decision,
but
the
nice
thing
is
we,
you
know
we
have
the
tools
to.
We
have
the
tools
to
resolve
those,
and
you
know
the
the
doing
of
the
work
is
not
the
challenge,
which
is,
I
think,
the
the
big
solve
here.
A
It
is
the
strategy
of
the
work,
which
is
the
challenge
and,
like
I
think
you
know,
as
with
many
other
things
like
that's
one
of
those
things
where
like
if
you're,
if
your
hardest
problems
are
in
execution,
then
like
something
in
your
system,
isn't
working
because,
like
execution
in
2021,
you
know
writing
software,
like
should
be,
should
feel
pretty
smooth
like
you
know,
like.
A
I
think
that
that's
that's
pretty
true
for
for
most,
for
work
of
the
nature
of
hours
like
the
execution
should
feel
you
know
like
pretty
pretty
smooth,
but
if
your
execution
doesn't
feel
smooth,
then
it's
like.
Okay,
we
need
to
like
so
like
something
has
broken
our
system,
but
if
your
strategy
is
the
most
challenging
thing,
I
think
it's
a
perfect
place
to
be
in
because,
like
the
real
work
and
value
of
what
we
do
is
like.
A
It's
the
same
thing
as
you
know,
you
move
your
complexity
to
your
docker
image.
So
if
you've
moved
the
complex
decisions
to
your
strategic
decision
making
process,
that's
awesome,
that's
exactly
where
you
want
to
be.
You
want
to
have
challenging
conversations
and
strategy,
and
you
want
to
have
easy
choices
and
execution,
and
if
you're
there,
you
can
move
really
quickly
right
and
you
can
move
like
with
purpose
and
efficiently
and
and
do
a
lot
of
cool
stuff.
A
This
was
fun.
I
will
stop
us
here
and
I'll
post
this
up
later
today,.