Powering Morning Brew's Transformation: How Sanity, Vercel, and Next.js optimize content

Powering Morning Brew's Transformation: How Sanity, Vercel, and Next.js optimize content


Powering Morning Brew's Transformation: How Sanity, Vercel, and Next.js optimize content

Hear from the Director of Engineering at Morning Brew about how they deliver rich, interactive stories to their audience, transforming their business from a newsletter to a media brand.

You’ll hear about their experience architecting a content tech stack that:
Provides expressive ways to leverage content across new brands and verticals
Speeds up content iteration, previews, and delivery
Empowers editors to independently manage content and even elements of the website


Content

0.359 -> foreign
2.74 -> [Music]
4.92 -> everybody Welcome this is powering
7.859 -> morning bruise transformation we'll be
9.599 -> talking a bit about how morning Brew
11.04 -> chosen news Technology stock to better
13.559 -> serve their readers their content
15.719 -> creators their developers any challenges
18.24 -> they face there any learnings we can
19.68 -> take from it happy to sort of share
21.48 -> their story and and talk through it a
23.4 -> little bit
24.779 -> um before that I'll be talking a little
26.519 -> bit through what sanity is and Drew will
28.619 -> be talking a little bit through what
29.82 -> priscellus we'll be asking questions
31.38 -> together
33.18 -> um yeah hope you guys enjoy it so before
36.18 -> that though I'd like to introduce the
37.62 -> people that I'm on stream with I'm
39.3 -> Carolina of course I'm a solution
40.8 -> engineer here at sanity I work closely
42.84 -> with our Enterprise clients on both
45.12 -> making sure sanity is the right tool for
46.8 -> them but also as they kind of grow in
49.68 -> the tool things like content modeling
51.48 -> Integrations plugins Etc and I will pass
55.14 -> it over to Monroe to introduce himself
58.559 -> yeah hey everybody I'm Drew I'm the
61.079 -> director of engineering here at morning
62.699 -> Brew uh and I'm sure I'll be referred to
65.46 -> as Brew Drew today as I'm joined by
68.34 -> another Drew uh we'll pass it along to
71.46 -> hey everybody uh my name is Drew yeah
73.86 -> that's I'm sure that's not going to get
75.299 -> confusing at all during this stream uh
78.24 -> but uh yeah so I'm a solution engineer
80.82 -> over here at versel help companies like
83.939 -> morning Brew go from whatever their
86.22 -> current Tech setup is to maybe adopt
88.799 -> adopting something like nexjs and versel
90.96 -> to kind of streamline their development
93.18 -> process
95.18 -> thank you both
97.56 -> um moving on just a brief intro to what
99.659 -> is sanity we are the platform for
101.34 -> structured content where NADA had the
103.5 -> CMS that we can do that too the reason
105.42 -> that we're a bit different is because of
106.92 -> our sort of three pillar approach that
108.42 -> you see here underlying sanity and the
110.82 -> content that you retrieve from it and
112.14 -> you write to it is the content leak it
113.82 -> is our content database
116.22 -> um we it is powered by grok with which
118.38 -> you can not only query and filter
120.06 -> content but also follow references
122.34 -> between content that's joined to each
124.2 -> other and do operations like like
126.24 -> joining strings even geolocation so very
129.539 -> cool uh heart of your data there
132.72 -> um on top of it is a sanity Studio which
134.64 -> is an open source react app that you can
136.62 -> configure to make sense for for your
138.72 -> business's needs so not only are you
141.12 -> sort of changing the shape of your of
142.86 -> your content creating schemas you're
145.14 -> also doing things like pulling in
146.52 -> content from other sources if you need
147.959 -> to
148.8 -> um previewing content within the studio
150.18 -> itself using expressive structures in
153.54 -> order to make that happen
155.16 -> and last but not least is the developer
158.04 -> experience because we are open source
159.72 -> and committed to open sources of
161.04 -> philosophy and using JavaScript as the
163.379 -> basis for a lot of what we do a lot of
165.12 -> people can contribute to sanity and its
167.16 -> ecosystem
168.42 -> um that includes things like plugins but
170.34 -> also things like best practices Snippets
173.4 -> um guides Etc so you don't need to sort
175.56 -> of build from the ground up every time
177.239 -> you're not alone when you're developing
178.8 -> insanity
180.239 -> underlying this philosophy is structured
182.459 -> content which you'll hear a lot I think
184.379 -> both in this columns and a lot of our
186.239 -> messaging
187.319 -> um basically that means Insanity you'll
189.36 -> build your content out of what makes
190.379 -> sense for your business and then make it
192.659 -> composable uh using Primitives like
194.819 -> strings and dates as you see here but
196.739 -> also things like beautiful high
198.3 -> definition images or even content you're
199.98 -> getting from other data sources like a
201.54 -> product or a pin
203.28 -> um or in video and you're pulling that
205.2 -> all together composing giving your
206.64 -> editors the power to to make a finished
210.12 -> product and then sending it out to
211.92 -> anywhere not just a website although we
213.659 -> will be focusing on websites today but
215.76 -> because of the flexibility of Sanity you
217.68 -> can also push it out to things like PDFs
219.9 -> mobile apps anywhere where you need to
221.7 -> consume content and now that we've
224.22 -> talked about kind of Where We Are
228.18 -> sort of thinking about content where's
230.04 -> where we came from so we started in 2017
231.959 -> uh we have offices in Oslo and San
234.42 -> Francisco
235.62 -> um and since 2017 we've uh pushed out
238.379 -> 150 million documents to be used by our
240.599 -> customers uh we're serving 10 billion
243.12 -> API requests a month uh we have 300 000
245.34 -> projects that are being being used by
247.56 -> developers
248.76 -> um Even in our slot Community we have
250.08 -> about 30 000 people in there so again
252.299 -> please do check us out and get involved
255.299 -> so now that we've discussed the kind of
257.76 -> underlying data layer the content that's
259.799 -> powering morning Bruce transformation
261.12 -> let's talk about the web app
263.46 -> yeah to dig into the web app a lot in
266.639 -> common actually between sanity and
269.28 -> next.js and versel in general with our
272.699 -> kind of idea of here is a language
276.96 -> JavaScript that we all know and love and
279.66 -> here is a tool react that can get a lot
282.36 -> done for you that tons of people know
284.82 -> right
285.9 -> and next.js is kind of this great
288.9 -> framework that gives react even more
291.12 -> superpowers out of the box so here at
294 -> versel we actively maintain xjs and
297.9 -> really believe in open source as well so
300.3 -> that's
301.38 -> um that's the next JS feel once you've
304.139 -> got your app though you've got to take
305.34 -> it to production right you can't just
307.139 -> get off of localhost is is some of the
309.78 -> best advice you will ever get as a
311.699 -> developer so
312.96 -> what's that mean
314.94 -> um well versel believes in providing
318.24 -> tooling that helps developers go from an
321.18 -> idea to a global performant web app as
324.66 -> soon as they can right we want to enable
327.5 -> iteration and really getting as much
330.36 -> feedback as you can kind of being as
333.06 -> scientific about the web development
334.8 -> process as we can be and to kind of do
339.36 -> that we just had to build a lot of
340.86 -> things that help enable you right CI CD
345.3 -> is something that every app needs that
346.979 -> no one actually wants to work on right
349.62 -> um you've got this like host of tools
352.86 -> here in Versailles toolkit that helps
354.539 -> you go from uh just simply starting with
358.44 -> your next app to having it truly be
361.259 -> performant and Global which is easier
364.199 -> said than done most of the time but for
366.18 -> sale actually does make it easy
370.919 -> and while we're focused on nexjs in this
374.699 -> conversation today because that's the
376.56 -> framework morning Brew shows you can
378.9 -> host pretty much any modern JS framework
383.039 -> on versel and due to some recent work
386.22 -> with the build output API you can
388.44 -> actually take your own homegrown
390.18 -> framework and kind of give those outputs
393.419 -> to versel in a very specific way and
395.46 -> take full advantage of Versailles
398.58 -> infrastructure regardless of of what
400.979 -> your app's built in
405.02 -> hi I'm back we'd like to talk a little
407.46 -> bit about how sanity and Brazil can work
409.319 -> together so usually in a Brazil kind of
412.38 -> next app situation you're going to be
414.36 -> using sanity as the underlying data
415.979 -> layer you're going to be able to use it
417.66 -> to drive the content that is actually
419.699 -> going to be showing up for your end
420.96 -> users
422.1 -> um reshaping it querying it regardless
424.259 -> of how you're using it so you can use
425.58 -> our API or API CDN to fetch data at
428.52 -> build time if you're serving server side
430.68 -> Etc that's where sanity sort of sits at
432.479 -> the kind of back of the stack there
434.88 -> yeah and if you want to see a version of
436.86 -> this application kind of this what we're
439.08 -> showing here uh in the next examples
441.84 -> folder uh there is a really good example
445.02 -> and getting started guide of using
446.639 -> sanity
448.199 -> um it's probably one of the highest
450.599 -> quality examples in the next JS examples
453.72 -> folder so
455.639 -> um but yeah so you've we've got an app
457.5 -> it's it's powered by sanity the next
459.66 -> thing we need to do is kind of power
462 -> that back end layer that supports a lot
464.46 -> of the dynamic pieces that actually
466.699 -> enable your next JS app so
469.62 -> versel gives you this serverless compute
472.56 -> that scales up and down seamlessly you
475.8 -> kind of just don't need to worry about
477.599 -> it that's one of the beauties of how
479.94 -> we've built things with forcel and and
483.18 -> then after you've got the kind of
484.74 -> dynamic pieces figured out we've um
486.9 -> we've got an edge CDN available to make
490.979 -> sure that that content is served in a
493.74 -> blazing fast way for everyone regardless
495.9 -> of where they're located right that's
498.78 -> that's a very important thing for
500.819 -> performance
503.3 -> and now that we've kind of covered all
505.86 -> of the different technical bits let's
508.02 -> hand it over to Druid morningbrew to
511.199 -> talk through kind of the use case
512.64 -> specifically like how how did we get
514.44 -> here
515.659 -> yeah thanks for that handoff Drew and
518.279 -> I'm glad you can serve it anywhere over
520.26 -> here in Montana uh you can get some
522.12 -> spotty internet service and uh it still
524.52 -> works for me so that that's good
527.1 -> um everyone for for anyone who's not
529.38 -> familiar with uh morning Brew morning
532.26 -> Brew is a media brand and we empower the
534.779 -> modern Business Leaders with the latest
537 -> need to know content
539.04 -> um and if you've been following our
540.779 -> journey you've seen that Our Brands and
542.88 -> our content have grown significantly uh
545.7 -> in this last year alone
548.76 -> um next slide there Carolina
551.94 -> uh these are our Brands uh so uh these
556.92 -> are a list of brands that you've come to
558.54 -> to know whether you're consuming us via
560.94 -> uh your inbox or on the web
563.7 -> um you might be listening to a podcast
565.2 -> or two uh we've had some events this
567.779 -> year and we'll have more events in 2023
570.3 -> uh and certainly you may be seeing us
572.94 -> more on YouTube or wherever you stream
575.88 -> your videos so
577.8 -> um we began with a newsletter a single
579.72 -> newsletter back in 2015
582.18 -> um and it is what we think today is
584.94 -> still the best daily newsletter product
586.82 -> but that's given us a little bit of a
588.899 -> license to to build out more franchises
591.48 -> build more newsletters
594.06 -> um and allow our audiences to engage
595.62 -> with with our content across a number of
598.38 -> different mediums
600.959 -> uh within uh this year alone we we now
605.1 -> connect with over 18 million people each
607.08 -> month across different across a number
609.66 -> of different platforms and in this next
612.48 -> slide you'll see those platforms you'll
614.16 -> see these business success metrics
616.56 -> um and if you're one Insanity or versel
618.66 -> can scale with you uh and and with your
621.06 -> business needs hopefully this can answer
622.86 -> some of that those questions under the
625.62 -> hood of these business success metrics
627.62 -> sanity today is managing more than 30
630.24 -> 000 documents in our production data set
632.88 -> um it's serving about 11 million API
634.98 -> requests a month and over 15 terabytes
638.04 -> worth of data on Versailles and
640.98 -> Versailles serving about 15 million cash
643.56 -> requests a month at this moment for us
645.66 -> and we're running about 2 million
647.76 -> serverless function uh implications a
650.82 -> month I hope we're not going over our
653.22 -> our contract true don't don't don't call
655.68 -> me after this
657.3 -> um and so if
659.279 -> if you're visual if you're in the
660.959 -> audience and you're a little bit visual
661.98 -> if you want to put together what Drew
663.6 -> and Carolina shared with us last in that
665.76 -> really nice animated slide here it is
667.68 -> right here Sanity on the back end uh all
671.1 -> of this is deployed to verse cell both
672.779 -> are sanity instance and our and our
674.7 -> morning Brew applications are deployed
676.5 -> to Purcell
677.76 -> um and then morningbrew.com and all of
679.8 -> our our content on the web is powered by
682.98 -> an xjs app
684.779 -> um and this gives you a nice little
686.1 -> visual for how how that interaction
688.38 -> takes place
691.7 -> thank you so much both for that
694.32 -> introduction to to what you guys are
696.24 -> doing
697.2 -> um so now I'll start sort of asking each
700.079 -> other questions talking through morning
701.7 -> Breeze transformation and I can begin I
704.459 -> wanted to take a step back and think
706.38 -> about when we first started talking to
707.94 -> each other
708.959 -> um when Drew from morningbrew was
711 -> looking for an optimized act for content
713.1 -> and delivery I'm curious about the goals
715.14 -> you were looking for in what ways you
717.12 -> perhaps held back by your previous stack
720.6 -> I'd love to hear about what that process
722.459 -> was and and how you went through it
724.68 -> yeah that's a awesome question Carolina
727.579 -> uh twofold right we're with both for
730.5 -> sale and Sanity so on versus side on the
732.899 -> deployment side and the delivery side
735.42 -> um morning Brew initially had a
736.74 -> monolithic rails app uh where we were
739.26 -> storing our content and serving our
741.18 -> content for for our end users at
744.14 -> morningbrew.com uh it worked for us for
747.18 -> a long time and for a long time to be
749.22 -> fair we were only serving our newsletter
751.26 -> uh so as a reader you would get the
753.36 -> newsletter in your inbox and if you
755.16 -> wanted to view that in the browser
756.3 -> there's a link still today where you can
758.1 -> click view in the browser and it shows
759.839 -> it to you but we wanted to let to
762.36 -> deliver more of our content allow the
764.7 -> content to stand on its own on the web
766.44 -> allow readers to go from piece to piece
768.959 -> maybe there's content that doesn't
770.04 -> necessarily live uh in the newsletter
771.959 -> doesn't get uh sent to your inbox but we
774.3 -> still wanted to you know have our
776.16 -> readers access that content for the day
778.579 -> and so certainly you can build some
781.32 -> caching mechanisms into a monolith like
784.38 -> a Jane over a rails but we didn't want
787.079 -> to reinvent the wheel and we certainly
789.36 -> didn't want to spend our time building
791.7 -> that caching mechanism or building that
793.5 -> caching layer and so we knew that going
795.779 -> with more of a static generation of
797.459 -> static site generation tool would be our
800.339 -> best our best use of time and best use
803.459 -> of that tool we chose next.js over over
805.86 -> Gatsby at the time and for us it was a
808.8 -> no-brainer to to deploy next.js2 Verso
811.86 -> given the close relationship between
813.54 -> versel and xjs and we make heavy use of
817.079 -> of ISR for those who are a little bit
820.8 -> more technical on the call so we use
823.56 -> incremental incremental static
825.8 -> regeneration we rehydrate our content as
829.5 -> it needs to be hydrated most recently
831.12 -> with Versailles on demand ISR that
834.36 -> they've released that's been huge for us
836.279 -> to only update content when it needs to
838.62 -> be updated when our editors update that
840.72 -> content so that's great for our end
842.399 -> users fast user fast and users
844.56 -> experience and that really meant the
846.72 -> business goals yeah getting close to 100
849.18 -> cash hit ratio sounds wild but you
852.48 -> actually can achieve it with on-demand
854.1 -> ISR so glad y'all are adopting that
857.519 -> using it it's one of my favorite new
858.899 -> pieces of Technology we've rolled out
861.18 -> well well it's it's awesome it's better
863.7 -> than our uh just to rehydrate everything
866.94 -> five minutes or you know get creative on
869.519 -> rehydration so it's been good for us
871.019 -> Drew uh remember you spoke with the
873 -> Versace about that approach about the
874.56 -> kind of a date based revalidate approach
876.3 -> and I think this one was quite Amazed by
878.1 -> it so I think you did a good thing
881.1 -> well we can we can share that little
882.779 -> snippet that little ditty for anybody
884.399 -> who's interested uh no that's awesome
886.98 -> and then on the other side on the flip
888.54 -> side of that Carolina to answer your
890.16 -> question our other goal
892.079 -> um
892.86 -> uh and as it relates to sanity is we had
894.899 -> an internal CMS
896.579 -> um that was solely focused on building
898.079 -> newsletters uh and again that worked for
900.54 -> our business for our business needs uh
902.82 -> for for a long time but about two years
905.399 -> ago it was morning Brew's agenda to
907.74 -> become more of a media company and not
909.779 -> just focus on newsletters and so when
912.06 -> rcms when you logged into our CMS the
914.279 -> first thing you saw was you know choose
916.139 -> your newsletter and then it was okay
917.88 -> choose the date and then choose what
920.279 -> stories you want to put in that
921.36 -> newsletter and write a story that's
922.68 -> specific to that newsletter it's very
924.06 -> rigid uh rigid in its validations in its
926.699 -> schema the UI the database we were
929.76 -> storing HTML in SQL and that that can
933.54 -> get a little bit messy even delivering
935.1 -> that HTML to the web versus delivering
937.86 -> it to a newsletter for anybody who's
939.839 -> familiar with newsletters your inbox
941.699 -> client it's like the 90s and so you're
944.279 -> very restricted in in the semantics and
946.5 -> the HTML that you can use so we'd have
948.6 -> to hide classes or delete classes or css
952.44 -> structure is that we might want to use
953.82 -> on the web that don't work for
955.079 -> newsletter and so we needed something
957.48 -> that was a little bit more flexible
959.66 -> and finding a headless CMS was kind of
963.3 -> our first goal and Sanity certainly does
965.399 -> that but sanity as I think Carolina you
967.44 -> also said in the intro is so much more
969.18 -> than that and can be more than that and
971.459 -> we really started to think about how our
973.019 -> data could be
975.139 -> reused in different areas right in
978 -> different mediums whether it's the web
979.86 -> whether it's the newsletter whether it's
982.38 -> a podcast whether it's YouTube whether
985.019 -> it's Commerce without our editors or
988.019 -> without our end users duplicating
989.519 -> content or trying to mess with wysiwyg
992.1 -> editors uh the whole you know content as
995.1 -> data really really jived with with our
998.04 -> team
1000.279 -> that's amazing thank you
1003.079 -> um a couple of things here that are
1004.579 -> coming to mind first I wanted to point
1006.019 -> out I forgot to mention at the top um if
1007.94 -> you'd like to put a question in the chat
1009.139 -> please do we'll see them coming in
1011.3 -> um we'll answer them at the end but we'd
1013.04 -> love to hear what you're thinking or how
1015.139 -> you're sort of processing what we're
1016.339 -> saying and second of all speaking of
1018.68 -> questions I wanted to actually think
1021.259 -> about something some things that you
1022.88 -> mentioned around your content model
1024.14 -> being brittle about wanting to iterate
1026.299 -> customize doing things it's a pretty
1028.4 -> common refrain I hear it from a lot of
1029.839 -> customers Affinity as well but Drew from
1033.62 -> Purcell I'm curious if you also if
1035.72 -> there's something in there that you also
1036.799 -> thought oh yeah this person really needs
1038.179 -> to move over this is time to kind of
1039.559 -> move to a new stack is there like a
1041.839 -> point there that you can point to yeah
1044.179 -> we hear quite frequently when we're
1046.88 -> talking to teams either in marketing or
1048.919 -> the content side of the house there's
1050.9 -> this uh pain with like hey we can't do
1053.84 -> this unless engineering does the XYZ
1056.059 -> thing first right and we get into these
1059.179 -> points where
1060.98 -> um you kind of are stuck uh without
1063.919 -> engineering's help you can't really push
1065.66 -> the business forward and you know that
1068.539 -> is a really common early on in a
1071.179 -> company's life cycle but as you kind of
1073.28 -> mature your Tech stack and and get a
1075.62 -> little further in that
1077.6 -> um space I think people want marketing
1080.48 -> to just be able to market right like let
1082.4 -> marketing do what they want to do
1084.98 -> um and something like sanity is always
1086.72 -> an amazing First Step It kind of
1089.6 -> enabling that
1091.28 -> and then obviously you've got to do some
1093.5 -> Dev work and probably change some
1095.059 -> internal process and stuff like that but
1097.28 -> the first thing to kind of making that
1099.559 -> possible is is switching to something
1101.299 -> like sanity
1102.62 -> um in my point of view
1104.36 -> I think saving developer hours is huge
1107 -> too I mean maybe a lot of people don't
1108.62 -> morning brew has an impressively lean
1110.539 -> team they've accomplished a lot with
1112.039 -> with the resources they've had so Props
1114.38 -> to you 100 I am so amazed at what y'all
1117.44 -> ship so quick
1119.72 -> um the ability to add all of those
1121.64 -> Brands is is insane
1124.84 -> well then yeah I hope some of them are
1127.7 -> out in the audience right now and I and
1129.2 -> you know who you are they're good
1130.94 -> they're a good team yeah
1134.419 -> um speaking of your team's needs I'm
1136.16 -> curious about what you were thinking of
1138.679 -> when you were re-architecting your
1139.76 -> content stack did you have lay out a
1141.559 -> list of requirements
1143.299 -> um and and how did you factor in needs
1145.52 -> from from different teams and versus the
1148.58 -> needs of your end users the morning Brew
1150.32 -> readers
1151.46 -> yeah that's that's great and a good
1153.44 -> segue from what Drew just mentioned
1154.88 -> about spinning out new products and
1156.26 -> Brands quickly that was one of the
1158.059 -> things we heard from the business
1159.679 -> um a goal of the business was to launch
1162.26 -> our B2B products on their own domains I
1165.38 -> think that was a goal of the business
1166.4 -> for about two years
1168.2 -> um they saw a need for this from a
1170.66 -> business perspective from an Advertiser
1172.64 -> perspective creating some distinction
1174.02 -> between Our Brands
1175.76 -> um and for us from a product and
1177.5 -> Engineering perspective it was always
1178.76 -> kind of well yeah we could but I just
1181.039 -> don't know if our foundation is right
1182.36 -> yet we have cracks in our in our house
1184.28 -> if you will
1185.66 -> um and I you know anything we do
1187.28 -> probably won't support that so that was
1189.14 -> a big one that was one of the biggest
1190.4 -> ones is hey
1191.9 -> um by by using sanity by using Brazil by
1195.32 -> using some of these state-of-the-art
1196.52 -> tools we'll be able to launch these
1198.74 -> these brands in these domains more
1200.419 -> quickly from a tech perspective it was
1203.36 -> just not having to duplicate content
1204.919 -> across a number of different Services
1208.28 -> um not having to spin up a monolith here
1209.84 -> and a model it there
1211.4 -> one's just a CMS one serves content to
1214.4 -> the front end sanity has helped uh
1216.919 -> helped us just there's one CMS there's
1219.38 -> one content server it's sanity
1222.679 -> um and from an internal user's
1224.36 -> perspective right for my editorial and
1225.919 -> marketing teams I love what Drew says
1227.78 -> about letting marketers Market we want
1229.58 -> to get out of people's way we don't want
1230.84 -> to be the Blocker we don't want people
1232.36 -> uh you know folks saying ah
1234.919 -> engineering's not getting this done fast
1236.6 -> enough for us we really want to
1238.16 -> templatize and and give them the tools
1240.26 -> and the Lego blocks to go and build what
1242.299 -> they want to build uh or deliver what
1244.52 -> they want to deliver to their end users
1246.58 -> and we also don't want to you know make
1249.5 -> them duplicate content or
1251.86 -> take pieces of their data or content and
1254.78 -> put it somewhere in one place in San
1256.82 -> India another place in San Diego take
1258.2 -> that in another CMS or another Legacy
1260.24 -> tool we really wanted there to be a
1261.919 -> singular tool that could do it all for
1264.44 -> our teams and and that's what sanity and
1266.6 -> bracell has helped us do
1270.22 -> and stop me if I'm getting too
1272.179 -> nitty-gritty was there it's just because
1274.16 -> something we're doing internally
1275 -> actually is interviewing customers and
1276.5 -> actually having a process around
1277.7 -> interviewing was that something that you
1278.9 -> did with people internal did you like
1280.82 -> have a form or some way of
1282.799 -> scientifically addressing people's needs
1284.48 -> great question Carolina uh tough
1287.6 -> question so I joined a morning for about
1289.52 -> a year and a half ago and I think I came
1291.62 -> in right at the time when we had already
1293.179 -> decided that rcms our internal CMS was
1295.64 -> not going to cut it for us uh both a
1297.919 -> blessing and a curse I was pretty much
1299.12 -> told I was hired and I was told find a
1300.98 -> new CMS for for our team uh there's the
1304.28 -> best of times it was the worst of times
1306.26 -> but we were also lean uh We've tripled
1309.38 -> our team has tripled our morning brew
1311.299 -> has tripled in the last year Alone
1313.94 -> um so I'm sure there was some up front
1316.1 -> you know hey what do you all need what
1317.659 -> do we expect uh to be honest I wasn't
1319.94 -> necessarily part of those conversations
1321.46 -> but going forward it's been great we do
1323.96 -> have uh product is that we have a built
1326.059 -> out product design team now we have a
1327.62 -> researcher on that product design team
1329.24 -> and I know on new features net new
1331.22 -> features that we've been building
1332.059 -> recently we do take a lot of time to
1335.36 -> research what our internal users need
1337.1 -> what our end users need
1339.1 -> and just from an internal perspective
1341.6 -> we're making heavy use of sanity's figma
1344.36 -> UI components to be able to even map out
1347.659 -> hey this is the user Journey internally
1349.88 -> of how I might go about creating these
1353 -> experiences insanity and I think that's
1355.22 -> been a fantastic process that we've
1357.14 -> started to implement
1359.659 -> wow I love that that's like uh honestly
1363.14 -> the the before story normally it's just
1366.14 -> you normally start with like a mock-up
1367.7 -> that shows the landing page right from
1370.4 -> the end customers perspective but I love
1372.38 -> thinking about the holistic uh life
1374.72 -> cycle here that's that's impressive
1377.299 -> and I think so Insanity people are going
1378.919 -> to be really happy that you're using
1380.36 -> that Library too that's very exciting
1383.419 -> um speaking of sort of modeling out
1384.919 -> workflows thinking about workflows I'm
1387.14 -> curious about how the sort of move to
1389.36 -> treating content as data
1391.52 -> um change the way that you sort of need
1393.02 -> to workflows of your development team
1394.22 -> and the workplace of your editorial team
1395.96 -> how did how do they work now how did
1397.76 -> they work before
1400.1 -> yeah great question Carolina I think one
1403.52 -> of the biggest changes and and from
1405.919 -> Media company if folks are familiar with
1408.5 -> media in general we all come from
1410.419 -> wysiwyg editors wysiwyg editors Rich
1412.34 -> Text editors were the golden standard
1414.679 -> for for at least the last decade if
1417.32 -> longer
1418.88 -> um and so not thinking in terms of hey
1422 -> how can I manipulate this HTML and and
1425.299 -> these semantics but just thinking about
1427.28 -> being given an input and saying this is
1429.86 -> the title put your title in put your
1432.32 -> body in and we'll worry about the rest
1434.419 -> we'll deliver it to where we need to
1436.22 -> deliver it to I think that's certainly a
1438.26 -> change that's changed both from
1439.28 -> development perspective
1441.2 -> um and us not having to manage and
1443.96 -> manipulate HTML which is a fresher
1446.36 -> breath there but also from an editorial
1447.919 -> perspective
1449.12 -> um kudos to editors uh they become power
1452 -> users in their in their cms's uh
1455.24 -> especially across media Brands They
1457.4 -> Don't Love You know there's a joke in
1459.38 -> shirts and other places but you know
1461.659 -> they they love to hate their cms's
1464.9 -> um and they and they find ways to get
1467.059 -> around your restrictions that the
1468.919 -> engineers have put in or your
1470.299 -> validations
1472.039 -> um and I think by thinking of content is
1474.679 -> data and again removing the page
1477.679 -> building or the HTML semantics uh that
1480.919 -> those old wysiwyg editors allowed we can
1483.26 -> really just say you focus on what you do
1485.539 -> best which is the content let us make
1487.64 -> sure that our our brand experience
1489.5 -> wherever that is whether it's on the web
1491.12 -> whether it's in the newsletters whether
1492.98 -> it's on a social platform we'll make
1495.14 -> sure that that experience looks
1497.24 -> consistent and and great with whatever
1500 -> content you give us
1502.88 -> um so it's I it's been great from from a
1506.419 -> technical perspective I think it it also
1509.179 -> allows the entire team to think about
1511.52 -> how things get that get billed as I
1513.44 -> mentioned we we map out a user journey
1515.96 -> in in Insanity in our in figma
1519.38 -> you know I think about building cms's in
1521.6 -> the past a lot of times the ERD and uh
1525.5 -> the schema is hidden only the engineers
1527.96 -> know about it product folks don't even
1529.58 -> know that product managers might not
1530.96 -> understand it right uh and that's both
1533.84 -> good and bad but it's it we're kind of
1535.64 -> The Gatekeepers of how something is
1537.32 -> structured now with sanity it's
1539.36 -> interesting to see a shift where we have
1541.34 -> product managers and product designers
1542.96 -> and even editors thinking about hey how
1545.12 -> does this fit into the overall schema
1547.1 -> how am I thinking about the users over
1549.26 -> here and how they're related to authors
1551.36 -> or how they're related to newsletters
1553.88 -> um I think it's good to be a little bit
1556.279 -> more transparent and for people to see
1557.84 -> maybe how the sausage uh is being made a
1560.779 -> little bit behind the scenes I remember
1563.6 -> we were speaking to memory editorial
1565.22 -> team and I think she called out why is
1566.779 -> this block have a different name from
1568.52 -> this block in this other context can we
1570.08 -> not just reuse the same block like the
1571.64 -> idea of an editor thinking about kind of
1573.2 -> this reusable repeatable pattern was so
1575.659 -> amazing that was great yes
1578.779 -> um speaking of which I think you also
1580.7 -> shared some shots of your studio would
1583.1 -> that be a good spot would this be a good
1584.72 -> spot of time to talk through what you
1586.34 -> are working with just yeah
1588.919 -> absolutely yeah let's look at it so I
1592.159 -> see this newsletter creation slide here
1594.559 -> I think I'm on the right one yeah that's
1596.6 -> right and I see that you have different
1598.4 -> slides for a newsletter and story
1600.2 -> creation so those are different content
1602.059 -> types
1603.08 -> um do you want to talk through some of
1604.22 -> the choices that you're making here
1605.12 -> anything that might be
1607.82 -> um
1608.84 -> pointed to a to the sort of user who's
1611.36 -> watching on the stream yeah sure
1614.059 -> um this is yep as as Carolina said
1615.919 -> newsletter creation we've got our editor
1617.779 -> review and then we have a preview which
1619.7 -> is quite common in our studio here we're
1622.52 -> reaching out to an angel and a template
1625.52 -> an email template engine that's
1627.44 -> rendering all this data and splitting it
1629.24 -> back to the end user they like to be
1632 -> able to see how they're you know how the
1633.799 -> top blurb here for example from from
1635.6 -> Neil and Maddie are rendering if it's
1638.24 -> too long if it's too short they like to
1640.64 -> double check that links are rendering
1642.02 -> correctly from the editor side you can
1644.36 -> see
1645.44 -> um you can see authors there a list of
1647.72 -> authors good use case for for references
1650.24 -> Insanity for anybody who's familiar with
1651.86 -> it right we have a people a people uh
1654.799 -> document and we can use those people in
1657.08 -> in different ways whether it's for a
1658.46 -> newsletter uh or for a story which might
1661.82 -> bring us to the story yeah story
1664.64 -> creation uh so here's story creation and
1667.22 -> newsletters can can be composed of these
1671 -> stories
1672.02 -> um but these stories also live on their
1673.46 -> own differently than say uh the story I
1676.039 -> gave about our old CMS so these stories
1678.26 -> uh can be published to the web
1681.08 -> um and we do give our editors I think a
1683.96 -> nice view of both the web preview over
1685.94 -> there on the right hand side that's of
1687.919 -> course tying into next JS
1690.26 -> um and then we also have that social
1692 -> preview you can see up at the top there
1694.46 -> we can show an editor for example how
1696.919 -> this story based on some of the SEO
1699.02 -> metadata they've inputted
1701.48 -> um you know or OG metadata how that
1704.059 -> might render say in Twitter uh or
1707.059 -> Facebook or wherever they share uh this
1710 -> article
1711.62 -> right Thomson is data means they can be
1713.539 -> delivered across these different
1716.24 -> yeah amazing thank you so much for
1718.64 -> sharing that yeah someone who has done
1721.159 -> email uh HTML development I love that
1724.58 -> you have a live preview of what's
1726.799 -> actually going to happen there because
1728.24 -> frankly email breaks all the time right
1731.419 -> um you mentioned it like the 90s and
1734.059 -> it's you know it's maybe even more
1735.919 -> tables actually
1738.559 -> but uh so that's awesome we all have
1741.14 -> that built in there and then you've got
1742.88 -> the web uh preview right there as well
1746 -> so
1747.08 -> um you've kind of got both in one
1748.76 -> workflow
1750.08 -> and then that kind of
1752.12 -> um let's jump off to kind of maybe talk
1753.74 -> about a rendering strategy uh for the
1756.799 -> web specifically uh browsers are
1759.32 -> thankfully a little better at rendering
1760.88 -> than email clients so maybe a little
1762.32 -> more straightforward but there's still
1764.36 -> performance and things like that that
1765.919 -> you have to kind of care about so what
1768.919 -> are kind of some of the strategies
1770.059 -> you've taken for uh kind of getting good
1773.24 -> performance uh out of your website with
1776.539 -> uh for sale on next.js
1779.299 -> yeah great question Drew uh as mentioned
1782.059 -> before uh we make heavy use of ISR and
1785.299 -> now on-demand ISR so for for some folks
1788.24 -> on the call who may be less familiar uh
1790.399 -> with that terminology we're statically
1792.14 -> building uh or statically generating the
1795.2 -> the content those stories on our web
1798.02 -> um and with on-demand ISR we're only
1800.12 -> statically generating it when that when
1802.1 -> that story changes so let's say I go in
1805.039 -> as an editor today and I publish a news
1806.899 -> article
1808.159 -> um it gets delivered to to the web as an
1810.74 -> end user I can as an end user I can see
1812.72 -> that that story and it'll never change
1815.299 -> uh versel will continue to serve up that
1818.179 -> cash version of that story until an
1820.94 -> editor goes back into sanity and maybe
1823.1 -> they had a typo maybe they needed to fix
1824.899 -> a quote maybe they wanted to add a new
1826.46 -> image and when they click publish again
1828.5 -> Insanity
1830.12 -> um then it will go and update and
1832.279 -> rehydrate that content but again
1834.559 -> continue to be cached Until the End
1837.86 -> um yeah I love that you use case because
1840.32 -> for some reason anytime I write a blog
1842.84 -> post I don't catch any typos until I
1845.419 -> publish it right as soon as I publish it
1848 -> that's when all the typos show up and
1849.74 -> I'm like oh my goodness so many errors
1851.72 -> here how could I have done this right
1855.26 -> um but this gives you kind of control
1858.2 -> over that uh pretty much immediately
1860.96 -> right oh yeah for folks wandering on the
1863.48 -> call how quickly on demand ISR kind of
1866.6 -> does push globally behind the scenes
1870.2 -> that's guaranteed to happen in 200
1872.899 -> milliseconds or less so that is global
1877.279 -> as well too so we're not just going to
1879.86 -> one region where that specific customer
1881.419 -> is that's actually going to all of our
1883.1 -> 18 different regions by default
1886.64 -> something we talk about insanity is
1888.38 -> delightful editorial experiences too and
1890.24 -> I think the idea of not having to just
1891.98 -> message or slack somebody when you've
1893.6 -> made a mistake being able to sort of see
1895.279 -> and fix those things without having to
1897.38 -> to create a bump at anybody's day is
1901.34 -> pretty delightful I think so yeah
1903.44 -> because power works really well for that
1905.059 -> the alternative before that was like
1907.22 -> you've got the page out right but now
1909.2 -> you need to go ask
1910.88 -> um some engineer to manually Purge the
1913.039 -> cache for you and uh and then so yeah
1916.64 -> there's that whole workflow of like well
1918.799 -> now I'm now I'm a little embarrassed to
1920.48 -> admit I need this help
1922.279 -> um instead you know that's all automated
1924.2 -> and we don't ever have to tell you know
1926.419 -> kind of like when you send a slack
1927.62 -> message and realize you need to edit it
1929.36 -> immediately before anybody else sees
1932 -> um you kind of have that same ability
1933.38 -> with
1934.76 -> um serving content at scale which is is
1937.52 -> the cool part
1938.779 -> uh that's that's that's such a good call
1941.059 -> out both of you I can't tell you I wish
1942.919 -> I counted the number of slack messages
1944.419 -> we have in our in our sanity Astra
1947.419 -> editorial slack channel of saying hey I
1949.7 -> updated this content it's not changing
1952.22 -> on the on the browser and then us
1953.96 -> reminding them hey if it was published
1956.24 -> in within the last 24 hours it's every
1958.159 -> five minutes if it's 48 hours it's you
1960.44 -> know an hour
1961.94 -> um it's been a fresh of breath there in
1963.799 -> the last two months to not have to to
1965.899 -> respond to those slack messages yeah
1968.12 -> that is awesome I'm glad you've had good
1969.919 -> success there honestly that feature was
1972.32 -> built entirely with
1974.779 -> um you know media companies in mind it's
1977.12 -> useful for a bunch of other use cases
1978.799 -> too but I think it shines with media
1982.399 -> um speaking of media and crazy media
1985.279 -> growth
1986.6 -> um let's let's transition to talking
1988.94 -> about all of those Brands you've
1990.44 -> launched
1991.34 -> um that was an insane number of Brands
1994.279 -> you've you've kind of shown on those
1996.26 -> past slides
1997.82 -> um I've been extremely impressed with
1999.62 -> how quickly y'all have been able to do
2002.08 -> that
2003.159 -> um I've I've worked in the past at
2004.6 -> companies where it's like oh we've got
2005.919 -> brand a maybe let's spin up brand B and
2008.62 -> C sites and those initiatives take some
2011.919 -> you know sometimes a full year but you
2014.5 -> all are doing this at a very fast
2015.94 -> Cadence and I'm curious kind of how
2018.46 -> you're how you're able to do that
2019.899 -> frankly
2021.519 -> yeah that's a great question Drew I'd
2023.62 -> say a big Kudos just alone to our
2025.659 -> engineering team I think we've got the
2027.46 -> best one in the in the media company
2029.679 -> these days if I can say so uh but uh
2033.82 -> they picked the right they picked the
2035.2 -> right tool in here right so not only did
2036.82 -> they help pick for sale as as the right
2039.22 -> platform to help us with delivering our
2041.08 -> content but they decided that earlier
2043.36 -> this year it was actually just Jan one
2044.74 -> of this year quarter q1 that we were
2047.799 -> going to use a mono repo uh for for for
2050.5 -> allowing us to quickly deliver new
2053.139 -> brands to our business we went back and
2055.119 -> forth we had a lot of conversations
2056.379 -> whether we were going to go poly repo
2057.94 -> mono repo benefits Pros cons I think
2060.879 -> first cell through correct me if I'm
2063.58 -> wrong maybe purchasing turbo repo or
2065.5 -> bringing turbo repo under under your
2067.899 -> under your arm yeah yeah turbo repo was
2071.139 -> closed Source we acquired it and then
2072.879 -> open sourced it and the original founder
2075.82 -> Jared Palmer is still working on it
2077.5 -> growing an amazing team here at Brazil
2079.2 -> yep and I think that news kind of said
2082 -> oh you know for 30 years and said oh
2083.56 -> interesting versus really investing in
2085.839 -> this uh area maybe we should really
2087.94 -> consider mono repo as the right
2089.8 -> direction forward so what does that mean
2091.78 -> morningbrew.com and every site every
2094.78 -> domain that that looks very similar to
2097 -> that you know emerging Tech Brew
2099.359 -> itbrew.com all of the B2B brands that
2101.74 -> we've split out they're all served from
2103.42 -> the same mono repo and we've been able
2106.06 -> to share code across each of those
2107.68 -> Brands share graph queries across each
2110.2 -> of those Brands and with our sanity
2112.359 -> structure the way we've set up our
2114.04 -> sanity schemas we've also been able to
2117.16 -> oh yeah great great uh shot there
2119.32 -> Carolina so this is uh Brands right you
2121.72 -> can it's almost self-serve to spin up a
2123.94 -> new brand minus some some DNS changes
2126.52 -> that we have to make as Engineers
2129.66 -> but this very easily shows you the
2132.64 -> configurability that we've given to our
2135.28 -> end users to to configure what a brand
2138.4 -> looks like what the home page looks like
2140.02 -> what colors it's using
2142.18 -> um and and that was a key uh like a big
2146.44 -> business objective for us in the first
2149.079 -> half of of 2023 but all things I big
2152.98 -> part I mean I just don't see how this
2154.48 -> would have been possible without the
2156.88 -> foundation that we built in 2022 with
2159.7 -> both sanity and Brazil almost self-serve
2162.46 -> to stand up a new brand is an amazing
2164.619 -> statement
2166.06 -> um so kudos to you and your team because
2168.16 -> that is very difficult to do yeah yeah
2170.74 -> so many people want this so sorry for
2173.32 -> throwing it up without much warning but
2174.88 -> I really wanted to show it off so it
2176.32 -> looks great
2177.76 -> again kudos to our engineering team I
2180.16 -> think you know sure could we automate
2182.079 -> DNS absolutely could we make the entire
2184.599 -> brand uh experience to totally
2186.88 -> self-serve absolutely I think a little
2188.859 -> bit of friction in there from an
2190.24 -> engineering team isn't a bad thing for a
2192.099 -> business for consistency but yeah
2195.64 -> foreign
2196.66 -> yeah I I definitely think a little bit
2199.72 -> of friction is good right you still want
2201.22 -> to have those conversations and it turns
2203.2 -> out you just said automating DNS and I
2205.839 -> got really scared because that's where
2208.599 -> like all of these crazy outages end up
2211.06 -> happening
2212.26 -> um so fair truth Fair maybe we'll save
2214.66 -> that one for a little bit later on
2217.48 -> um
2218.26 -> but yeah the the like safety and
2220.18 -> iteration
2221.619 -> um sounds very like important
2225.88 -> um for your team
2228.4 -> um are you able to like collaborate
2230.26 -> quite easily between say you've got a
2233.02 -> new a new template going out right
2236.079 -> um for one of your pages how does what's
2238.839 -> the iteration Story look like between
2241.599 -> um
2242.38 -> kind of whoever's coming up with the
2244.42 -> content maybe the designer who's said
2246.82 -> what the page should look like and the
2248.619 -> engineer who's maybe making this new
2250.96 -> template from scratch
2252.46 -> yeah that's a great question Drew for
2255.099 -> the most part
2257.2 -> engineering is out of the picture by the
2259.54 -> time we've given it to the end user to
2261.28 -> deliver the page we haven't yet quite
2263.32 -> had those back and forth I need this now
2267.04 -> or or you know like we need to iterate
2270.099 -> on this immediately but what I can't say
2273.28 -> and Carolyn I think I have the Gated
2274.66 -> content piece we can show that this
2277.42 -> might fit into your question drew around
2281.14 -> well we built this gated content oh I
2284.079 -> think this is interactive storytelling
2286.24 -> maybe a different one yeah there we go
2287.56 -> Carolina thank you
2288.94 -> um so gated content most marketers uh
2292 -> know about getting content most of you
2293.8 -> know about gated content
2295.54 -> um they needed the ability to create
2297.76 -> these forms very quickly right create a
2300.339 -> form to collect some some some
2301.54 -> information about the end user and then
2304.78 -> deliver them whatever the content that
2307.119 -> is gated on the end of that whether
2309.4 -> that's a story whether it's a PDF
2310.839 -> whether it's a video you you know you
2312.4 -> name it
2313.599 -> um and so that that iteration process up
2315.7 -> front from from a product and
2317.02 -> Engineering perspective and a
2318.099 -> stakeholder perspective was hey
2320.32 -> um we need this this is what we need to
2322.3 -> look like we use product design to come
2324.16 -> up with with the visual and then we also
2326.68 -> had uh forms so we thought about forms
2329.5 -> in in a sense of we'll give you a small
2331.839 -> medium large and extra large form so
2333.76 -> this isn't just a hey make this form
2335.98 -> whatever you want throw whatever inputs
2338.079 -> you want because obviously there needs
2339.4 -> to be some kind of contract uh from a
2341.68 -> technical perspective of where that form
2344.02 -> is is you know where that formed at is
2346.18 -> going and and what it's doing on the
2348.339 -> back end but we said okay we'll give you
2350.44 -> a small medium and large if you will
2352.32 -> form sizes and giving you that template
2356.44 -> and that framework those boundaries to
2358.06 -> work with with Insanity you can go and
2360.16 -> create the Gated content piece you can
2361.96 -> add that image you can add a title you
2363.46 -> can add content pick your size form and
2366.64 -> we obviously explain what that means
2368.26 -> what what input fields that gives you
2370.2 -> and then you can launch it right and
2373 -> again drew that to your point we let
2375.04 -> marketers Market we we let them go out
2377.2 -> we don't get in their way if they want
2379.72 -> to iterate on this if they wanted a new
2381.46 -> uh form size say they wanted an XXL or
2385.54 -> they wanted to add some different inputs
2387.04 -> we'll work really closely with them and
2388.9 -> product managers and product design to
2391.06 -> figure out what the best way that that
2392.8 -> that could fit in there
2395.079 -> um
2396.04 -> but yeah does that does that answer your
2397.78 -> question there Drew 100 let marketers
2400.3 -> Market
2401.7 -> that's a little awesome in this story is
2403.72 -> how much trust there is between everyone
2404.92 -> too I mean I feel like the sort of this
2406.66 -> form story is very much a marketer sort
2408.22 -> of stepping and going this is just going
2409.42 -> to work there's this level of sort of
2410.8 -> feeling sure and secure in that platform
2413.02 -> which I mean speaks to like how much it
2415.119 -> has worked in the past that they don't
2416.5 -> have a reason to feel that things will
2417.94 -> be insecure or broken which is great
2421.42 -> absolutely
2423.099 -> speaking of wins like that I would like
2425.2 -> to sort of ask my last question sadly
2428.079 -> about as you adopted sanity brassall
2430.599 -> what were other successes that you've
2431.8 -> had
2432.52 -> um what have been the long-term benefits
2434.079 -> that you've seen
2435.52 -> um what would you recommend to other
2436.54 -> companies if they move forward with this
2438.579 -> path yeah
2440.56 -> the best question of this webinar uh
2443.26 -> Purcell I think from Versailles
2445.48 -> perspective and xjs perspective uh Drew
2448.9 -> nailed it in the beginning he was
2449.98 -> talking about cicd pipelines no one
2451.48 -> likes to build those
2453.04 -> um so the ease of deployments the uptime
2454.96 -> the performance uh just to be completely
2457.54 -> Frank it's it's it's kind of out of mind
2459.52 -> uh out of sight out of mind for for us
2461.74 -> on the front end of things we just know
2463.599 -> that one with the static generation and
2465.82 -> two with Purcell
2467.74 -> um hosting our front end things work
2470.619 -> there's we have up time it's always up
2473.02 -> it hasn't gone down and so
2475.359 -> um that's a far cry from from other
2477.4 -> services that we've certainly had in the
2479.32 -> past and then from from sandy's
2481 -> perspective it's really been the
2482.8 -> acceleration of of and the velocity that
2485.74 -> we've had out in building new
2487.119 -> functionality to think that it took us
2489.46 -> as long as it did to make newsletters
2491.74 -> and stories working in our internal CMS
2494.2 -> and then to see where we are just a year
2496.72 -> later we just celebrated our our year of
2499.119 -> being Insanity a couple last week
2501.16 -> actually
2502.2 -> and so for for that to be only a year
2505.3 -> and for us to already be creating
2507.94 -> um you know we've done the newsletter
2509.98 -> we've done the stories that's that's
2511.119 -> kind of old news from our technical
2512.859 -> perspective and a product perspective
2514.24 -> but to be able to empower our marketing
2516.82 -> teams with getting content pieces to
2518.74 -> empower our growth and marketing teams
2521.079 -> with managing and manipulating the home
2523.3 -> pages
2524.5 -> um the nav bar you see the featured
2526.18 -> Stories the spotlights
2528.339 -> um to allow more people to self-serve uh
2531.94 -> has been huge uh it just would not have
2534.52 -> been possible without sanity and then I
2537.64 -> and I think Carolina Drew both of one of
2539.56 -> you or both of you said this in the
2540.76 -> beginning
2541.839 -> um but you mentioned how developers uh
2544.66 -> you know working in JavaScript they're
2546.28 -> familiar with it they're able to manage
2548.859 -> for sell and whatever Rochelle throws at
2551.5 -> us same thing about sanity right with
2553.839 -> sanity being written in JavaScript being
2555.4 -> able to use react uh are saying the same
2557.92 -> Engineers that we've hired who can
2559.96 -> manage and and maintain and build
2562.06 -> incredible experiences on the front end
2563.76 -> they're also the ones managing and
2566.5 -> maintaining and building the experiences
2568.78 -> within the CMS so you don't have that
2570.52 -> traditional back-end team is focusing on
2572.98 -> the CMS front-end team focusing on the
2575.2 -> front end and then you know someone not
2577.72 -> wanting to talk to somebody else about
2579.099 -> that contract that they agreed on or
2580.839 -> someone getting upset because the graph
2582.76 -> or the API doesn't match what they
2584.619 -> thought it would match they only have
2586.9 -> themselves to blame so it's a you know a
2588.579 -> single engineer two Engineers who are
2590.319 -> working on on the entire product and um
2593.92 -> and that's really great from from a eye
2596.38 -> position from even a leadership position
2598.24 -> being able to hire
2600.52 -> um Engineers who can can do it all uh
2603.579 -> with sanity versel and and all of your
2606.76 -> experiences for end users is really is
2608.68 -> really great
2609.78 -> even for developer happiness right if a
2612.339 -> developer wants to jump from one project
2613.72 -> to another or think about how things are
2616.359 -> composed it's also transparent and
2618.22 -> interconnected
2621.16 -> I'm thinking of my old co-worker who is
2624.16 -> just the one person who knew how rcms
2626.2 -> worked who always had to like go do
2628.24 -> random CMS migration things and it's
2630.76 -> like
2631.9 -> I know he didn't enjoy that work
2634.599 -> um and so but he loved writing react so
2638.44 -> like just like stay in the
2641.8 -> um like your your
2643.78 -> we can call it like the Zone but it's
2645.46 -> it's really just flow right you can stay
2647.26 -> in the flow of writing react and then
2649.599 -> working on sanity and then still writing
2651.7 -> react in your next step and then
2653.74 -> your features live before you know it
2658.599 -> so I think we'd like to address some of
2660.819 -> our audience questions
2662.5 -> um we have a list of them here I I think
2664.66 -> if it's okay I'll ask the first one and
2666.46 -> then maybe someone wants to pick one out
2667.66 -> and sort of say I really want to answer
2668.859 -> this one fortunately we have 10 minutes
2670.18 -> well 13 minutes left but I can ask the
2672.7 -> first one that I've received if a
2674.68 -> question from morning Brew Drew does
2675.94 -> sanity serve content for your email
2677.38 -> newsletters or are they copy and paste
2679.18 -> it into something like send grid
2681.96 -> great question
2685.3 -> so our email newsletters right now are
2687.52 -> are composed and and built in insanity
2690.76 -> and then when the editors uh when we
2692.859 -> deliver those or send those to our end
2694.359 -> users that goes through an ESP
2696.819 -> um and uh right now it's it's kind of
2699.339 -> it's partly automated and partly manual
2702.16 -> um we're looking to make that more more
2704.079 -> automated for for our end users in the
2706.66 -> future but we create campaigns you know
2709.42 -> it's like a mailchimper or a sangrid we
2711.88 -> create the campaign for that end user uh
2714.339 -> when they click uh publish button
2715.839 -> Insanity
2717.04 -> um of course that's that's custom to us
2719.579 -> we'll send along the content we'll send
2722.079 -> along the template we'll send along the
2723.76 -> the user list everything we send along
2725.44 -> uh to our ESP and then any final touches
2729.16 -> that uh before the send goes out in the
2731.859 -> morning or in the afternoon is made by
2734.14 -> our editorial team so so half and half
2736.78 -> there's a Lambda somewhere that reshapes
2738.579 -> that sort of Sanity Json content into
2740.7 -> mjml or whatever it needs to be to make
2743.5 -> that happen something like that yeah
2745.18 -> exactly Carolina got it
2748.66 -> um does anyone else have a question that
2749.92 -> they'd like to that feels burning to
2751.96 -> address otherwise I can I can choose the
2753.94 -> next one
2759.099 -> see I'm looking through the list here
2760.9 -> quickly
2763.24 -> um I think
2765.22 -> so there's some pretty interesting ones
2766.66 -> in the chat I think a lot of people have
2768.819 -> questions for brew Drew yeah they're all
2771.46 -> for you so
2773.02 -> really oh boy A Feast for you we can
2776.02 -> just go we can go uh chronologically I
2779.14 -> think that's okay
2780.16 -> okay
2781 -> um how much of Bruce structure routing
2783.339 -> and connectivity is based on connections
2785.56 -> within sanity Studio versus connecting
2787.18 -> them using the front end
2789.52 -> are you doing configuration of a front
2791.56 -> end I guess through sanity or or is
2793.54 -> there Logic on the phone let's start
2794.8 -> taking care of some of these choices
2799.68 -> so our front end today uh we're using
2803.859 -> graph uh on the front end and we've
2806.68 -> we've Federated that data so we have a
2808.3 -> bunch of different services on our back
2809.5 -> end we still have some Legacy uh places
2811.72 -> where some content is served from that's
2814.119 -> not sanity and we Federate all of that
2816.88 -> data actually through an open source
2818.5 -> tool called graphql mesh
2820.54 -> um it's both loved and hated by our
2822.64 -> Engineers internally uh I am a little
2825.16 -> bit to blame for its existence in our
2827.38 -> stack uh it's both an API Gateway and a
2830.68 -> mesh which can get a a little tough to
2833.619 -> deal with
2834.88 -> um but we extend this is really neat
2836.68 -> because we're also able to extend
2838 -> sanity's graph where it maybe doesn't
2840.64 -> fit our needs from a presentation layer
2842.94 -> it extends we're able to create our own
2845.68 -> resolvers so we can write like rock
2847.54 -> query uh resolve that and make sure that
2850.78 -> the front end is only talking in graph
2852.579 -> in a single graph uh reaching out to our
2855.7 -> back end and the front end doesn't
2856.9 -> really care where that at the end of the
2858.7 -> day how we here the front end shouldn't
2860.5 -> really care about where that content is
2861.819 -> coming from we should be able to spin up
2863.5 -> X number of services on the back end X
2865.96 -> number of Sanity instances on the back
2867.64 -> end and as long as it's all Federated
2869.74 -> into a single graph our front end can
2871.96 -> request what it needs and and display it
2874.66 -> as such said answer that question
2876.819 -> Carolina
2878.44 -> I think so yeah
2880.72 -> yeah I think maybe
2883.78 -> grout slugs Etc redirects and that sort
2886.72 -> of thing and so which is hard to kind of
2889.24 -> Unite with this idea of a graph mesh
2891.28 -> that's like really just content data
2893.74 -> based based so yeah
2896.7 -> I can say that like we do have some
2899.079 -> redirects from some old for Just For
2901.42 -> example from Legacy uh content those are
2903.94 -> uh actually hard-coded in our next JS
2906.579 -> app
2907.78 -> um but uh the Slugs we do give some
2911.619 -> configuration to slugs in our sanity
2913.839 -> instance but again with next JS and and
2916.78 -> the paths I'm no next JS expert but with
2920.079 -> the path in the routing for that next.js
2922 -> presents you out of the box we do have
2923.74 -> to fit some of that uh the content you
2926.02 -> know a story falls under you know a
2928.119 -> story uh asterisk or story star and
2931.9 -> anything that's a story related of
2933.64 -> course gets rendered under on the index
2935.68 -> page of you know app slash stories yeah
2939.04 -> and I think sanity leans itself very
2941.26 -> nicely just by default to there's kind
2943.96 -> of this trend of like server driven UI
2945.88 -> right
2947.14 -> um and Insanity like by default is that
2950.92 -> when you build your next JS app
2953.44 -> um unless you're like literally putting
2955.9 -> like jsx inside of Sanity
2959.14 -> um which you know you might be seeing
2962.079 -> weirder things
2963.24 -> so some people might be doing it but the
2965.98 -> default way you would use sanity very
2967.66 -> much is this like server driven UI
2969.52 -> approach
2970.619 -> it's just instead of like hard coding
2973.66 -> some Json blob yourself with all of that
2976.54 -> mapping and responding from an API
2978.28 -> endpoint you're using sanity to power it
2980.619 -> at all
2981.579 -> um so I think maybe that's kind of the
2984.16 -> question or maybe that was anyway we can
2987.099 -> if in the chat if that didn't answer
2989.26 -> your question let us know and we'll
2990.94 -> maybe provide some more clarity for sure
2995.14 -> um but no I think we'd like to change
2997 -> talk a little bit talk a bit about
2998.02 -> caching there's a question here how do
3000.54 -> you ensure that all pages using cache
3002.4 -> content are purged or updated when you
3004.2 -> update the content Insanity let's say
3005.819 -> you update the title on one of ten
3008.7 -> articles you display on the front page
3010.079 -> of morning Brew so yes that one time
3013.92 -> change change everything
3015.92 -> okay I'm going to give you a little
3018.119 -> little insight into how that works but
3021 -> from a home page perspective we are not
3022.74 -> yet on on demand ISR so our home page is
3025.619 -> actually still on uh just ISR our old
3029.04 -> school I think we do every five minutes
3031.26 -> we rehydrator every 10 minutes so we're
3034.74 -> not quite uh modernized there yet but
3037.56 -> from a story perspective right and you
3039.18 -> can see how that's a little bit slightly
3040.859 -> easier but if a story changes the entire
3043.56 -> everything on that story page uh gets
3046.8 -> purged and and rehydrated that'll be an
3050.22 -> interesting problem for us to solve we
3051.72 -> do want to solve it we're making a lot
3053.04 -> of API requests probably unnecessarily
3055.92 -> so to to sanity because of this just
3059.28 -> blanket five minute rehydration so
3062.099 -> um yeah if you're a if you're an
3064.38 -> engineer who who knows something or two
3066.24 -> or about that uh don't hesitate to reach
3068.88 -> out
3069.9 -> yeah it sounds like we just found a good
3071.339 -> applicant for you there we go yeah and
3075.18 -> to be clear I think it's perfectly like
3077.099 -> it's a great approach to combine uh
3079.74 -> standard time-based ISR with kind of the
3081.96 -> event driven ISR as well I think they
3083.819 -> pair together really nicely for some of
3085.619 -> these different use cases
3087.96 -> um and to to speak to how this could
3090.42 -> work I
3091.619 -> I think you could probably just query
3093.48 -> sanity for what's connected and then you
3096.9 -> know kind of get that data set back and
3098.76 -> in next.js call res dot revalidate
3102.3 -> um after version 12.1 by the way so
3105.98 -> here's your motivation to upgrade to the
3108.9 -> latest version of next if you haven't
3110.22 -> yet
3111.66 -> yeah it's a great question because it's
3112.92 -> common across all data platforms right
3114.42 -> anytime you're sort of collating data
3115.98 -> from across the your sort of content
3118.5 -> Source you're going to have to sort of
3119.64 -> run into this so amazing we have time
3122.7 -> for one last question
3125.04 -> um
3126.18 -> I'm going to ask one just because it's
3128.04 -> sort of more about the structure
3129.3 -> structuring of content and how sort of
3131.88 -> speaking to our philosophy here
3133.92 -> um so for you brew Drew do you give an
3136.2 -> example of content you have within
3137.7 -> something that's repurposed through
3138.78 -> different front ends so are you reusing
3140.579 -> content across different places through
3143.099 -> different foods
3145.559 -> yes uh so
3148.619 -> just as an example and this is more
3150.119 -> newsletter and web web example which is
3152.64 -> which is strong for us but we have
3155.819 -> content that we reuse
3158.88 -> um so store stories out of Star Wars
3161.04 -> stories stories uh you know you're
3163.26 -> referencing a story so when you compose
3164.88 -> a newsletter you're referencing a story
3166.859 -> you never have to override that you
3168.72 -> never have to do anything else you
3169.859 -> create a story it goes to the web all I
3172.5 -> do in a newsletter is I say hey I want
3174.059 -> this story to go in this newsletter in
3175.92 -> the daily tomorrow and all the content
3178.26 -> is rendered nothing else the editor has
3180.599 -> to do right that's that's an easy one
3183.599 -> um but I think what's also neat about
3184.98 -> that is we also give the editors the
3186.599 -> ability to override and this doesn't
3188.819 -> necessarily hit that question but they
3190.619 -> can also override that content so
3192.18 -> content can go specifically only to a
3194.28 -> newsletter without impacting the web uh
3197.22 -> newsletter which is also I think quite
3199.14 -> powerful for us we're Limited in size
3202.38 -> and scope of what we're allowed to
3203.64 -> deliver to your inbox before we get
3206.579 -> clipped or before the newsletter doesn't
3208.2 -> work uh and so having shorter content
3212.099 -> um a blurb or a summary of long-form
3214.02 -> content
3215.339 -> um is something that we also allow our
3217.44 -> editors to do our social team right now
3220.2 -> uses
3221.579 -> um our feeds so our RSS feed they use so
3225.78 -> all of our content builds our RSS feed
3229.2 -> um and then our social platform uh our
3231.66 -> social teams uses our RSS feed to launch
3234.78 -> or blast those out if you've ever seen
3237.599 -> an article on LinkedIn or Twitter or
3239.76 -> Facebook coming from morning Brew so
3241.5 -> that's also interesting
3243.359 -> um
3244.319 -> yeah hopefully that answered that
3245.76 -> question Carolina
3247.92 -> that way I think you also come to a good
3250.26 -> point about sort of building these
3251.28 -> editorial experiences where referencing
3253.02 -> is great having things just happen is
3254.819 -> great but then having this additional
3256.26 -> layer of configurability of being able
3258.42 -> to override things Etc is just that much
3260.7 -> more powerful
3261.96 -> yes
3262.98 -> um sadly we're at the end of our hour
3265.319 -> this flew by thank you so much for
3267.54 -> joining us
3269.04 -> um I don't know if you if any of the
3270.78 -> Drews want to give a goodbye as well
3273.18 -> um we have tons of questions left so
3276.48 -> um I can I'll let you guys say bye and
3278.819 -> then sort of
3279.96 -> tell you where to go if you'd like to
3281.46 -> continue the conversation
3283.98 -> yeah thanks for chatting with us Drew uh
3287.04 -> love this conversation
3289.319 -> um very excited to see what your team
3291.359 -> continues to do with all of uh this new
3294.3 -> tech uh and if you're here's my final
3297.119 -> plug which is if you're interested in
3298.98 -> hearing about new tech xjs comp is
3301.079 -> coming up so xjs.org
3305.52 -> yeah that's awesome Drew uh definitely
3307.8 -> get to the next JS conf I'll be I'll be
3310.319 -> planning on attending uh thank you
3311.94 -> Carolina Drew you two are both both
3313.8 -> fantastic folks love working with either
3316.14 -> of you on either side of this uh if you
3318.48 -> want to continue this conversation in
3319.8 -> the audience uh I am in the slack
3322.2 -> Community Channel uh you can feel free
3324.42 -> to add me or whatever is appropriate
3326.819 -> there
3328.079 -> um and then uh uh you can also email me
3331.559 -> if you if you really want if you've got
3332.94 -> a pressing email uh question uh it's
3336.42 -> just drew at morningbrew.com I'll try to
3338.819 -> answer if you email me uh but thank you
3341.4 -> so much uh Carolina and Drew that's so
3344.22 -> generous of you thank you and yes if
3345.839 -> you'd like to join our slack and you're
3347.099 -> not in there yet that's slack.sanity.io
3349.38 -> so see you there thank you so much
3353.93 -> [Music]

Source: https://www.youtube.com/watch?v=0djHfSrjCE8