10/4/2022 – BuiltOnAir Live Podcast Full Show – S12-E05

Duration: 61 minutes

Be Sure to Subscribe to the podcast!

To get all the latest videos and demonstrations from the BuiltOnAir Podcast, subscribe and get notified on our Youtube channel here and our newsletter/community here.

FULL EPISODE VIDEO

Watch the full video of the show. See below for segment details.

FULL EPISODE AUDIO

Listen to the full Audio podcast for this episode here. Or add to your favorite podcast player

Listen On: Apple | Overcast | Spotify


The BuiltOnAir Podcast is Sponsored by On2Air – Integrations and App extensions to run your business operations in Airtable.

In This Episode

Welcome to the BuiltOnAir Podcast, the live show.  The BuiltOnAir Podcast is a live weekly show highlighting everything happening in the Airtable world.

Check us out at BuiltOnAir.com. Join our community, join our Slack Channel, and meet your fellow Airtable fans.

Todays Hosts

Alli Alosa – Hi there! I’m Alli 🙂 I’m a fine artist turned “techie” with a passion for organization and automation. I’m also proud to be a Community Leader in the Airtable forum, and a co-host of the BuiltOnAir podcast. My favorite part about being an Airtable consultant and developer is that I get to talk with people from all sorts of industries, and each project is an opportunity to learn how a business works.

Kamille Parks – I am an Airtable Community Forums Leader and the developer behind the custom Airtable app “Scheduler”, one of the winning projects in the Airtable Custom Blocks Contest now widely available on the Marketplace. I focus on building simple scripts, automations, and custom apps for Airtable that streamline data entry and everyday workflows.

Dan Fellars – I am the Founder of Openside, On2Air, and BuiltOnAir. I love automation and software. When not coding the next feature of On2Air, I love spending time with my wife and kids and golfing.

Show Segments

Round The Bases – 00:03:12 –

A Case for Interface – 00:20:07 –

Explore Interfaces with “My Wardrobe Interface Contest Winner”.

Contest Winning Interface from Russell Bishop.

View Script

An App a Day – 00:41:06 –

Watch as we install, explore, and showcase the Page Designer App from the Airtable Marketplace. The app is described as “Learn some advanced tricks from Alli Alosa on how to utilize the popular Page Designer App by Airtable.”.

View App

Scripting Time – 00:51:38 –

Explore Scripting with “Templated Sub/Junction Record Links”.

Kamille will showcase a script that looks at a record and what sub/junction records are required by a template, and adds the ones that are missing.

Full Segment Details

Segment: Round The Bases

Start Time: 00:03:12

Roundup of what’s happening in the Airtable communities – Airtable, BuiltOnAir, Reddit, Facebook, YouTube, and Twitter.

Segment: A Case for Interface

Start Time: 00:20:07

My Wardrobe Interface Contest Winner

Explore Interfaces with “My Wardrobe Interface Contest Winner”.

Contest Winning Interface from Russell Bishop.

View Script

Segment: An App a Day

Start Time: 00:41:06

Airtable App Showcase – Page Designer – Learn some advanced tricks from Alli Alosa on how to utilize the popular Page Designer App by Airtable.

Watch as we install, explore, and showcase the Page Designer App from the Airtable Marketplace. The app is described as “Learn some advanced tricks from Alli Alosa on how to utilize the popular Page Designer App by Airtable.”.

View App

Segment: Scripting Time

Start Time: 00:51:38

Scripting Time: Templated Sub/Junction Record Links

Explore Scripting with “Templated Sub/Junction Record Links”.

Kamille will showcase a script that looks at a record and what sub/junction records are required by a template, and adds the ones that are missing.

Full Transcription

The full transcription for the show can be found here:

[00:01:41] Welcome back to the BuiltOnAir podcast.
[00:01:44] We're glad to be with you.
[00:01:46] We've got myself Dan Fellars,
[00:01:48] regular host Kamille Parks
[00:01:50] and Alli Alosa with
[00:01:51] us. Welcome back as always.
[00:01:53] Good to have you
[00:01:55] and we have a special guest with us,
[00:01:57] Russell Bishop. He's a returning guest.
[00:02:00] Glad to have you with us,
[00:02:02] Russ. Great to be here.
[00:02:04] We'll be getting to know
[00:02:06] a little bit about Russ.
[00:02:07] We highlighted him last
[00:02:08] week, but we're going to go deeper into
[00:02:11] his award winning interface later in the
[00:02:13] show, award winning contest winning.
[00:02:16] It's probably more accurate.
[00:02:19] So as always, our BuiltOnAir podcast,
[00:02:21] a live show every Tuesday 11 a.m.
[00:02:24] Eastern we go through
[00:02:25] four different segments.
[00:02:26] I'll walk through what we're
[00:02:27] gonna be talking about today.
[00:02:29] We always start with our
[00:02:30] Round the Bases of
[00:02:31] what's going on.
[00:02:32] Keep you up to date
[00:02:34] on the Airtable communities.
[00:02:35] Then we will spotlight our
[00:02:37] primary sponsor On2Air. Then Russ will be
[00:02:40] showcasing his contest
[00:02:43] winning interface of my wardrobe,
[00:02:46] and then Alli will be going through
[00:02:49] the page Designer and some advanced tricks
[00:02:51] with Page Designer app.
[00:02:53] And then a shout out to
[00:02:55] our community and then finally,
[00:02:57] Kamille will finish off with a
[00:02:59] scripting showing
[00:03:01] how to interact with linked
[00:03:03] records and and whatnot.
[00:03:05] So with that we will start
[00:03:08] with Round the Bases,
[00:03:10] relatively quiet week
[00:03:12] on the community front.
[00:03:14] no feature releases that I'm
[00:03:17] aware of.
[00:03:20] and but there was one,
[00:03:23] this is from a previous announcement
[00:03:27] that came out,
[00:03:28] I think we talked about it last week and
[00:03:32] but there was something hidden
[00:03:35] that came out a couple
[00:03:37] of days ago that they
[00:03:38] we haven't got so it's still a mystery.
[00:03:40] So this is this comment right here by
[00:03:42] Nathaniel asking about
[00:03:44] more details for the linked record I.D.
[00:03:47] So you can sort by linked record
[00:03:49] like quarter project and asking what it
[00:03:52] meant because it says it was
[00:03:55] request from this Jose Martinez.
[00:03:59] And so and then Allen adds on if it's this
[00:04:03] request from Jose then
[00:04:05] it's a pretty big one.
[00:04:08] And Carlson adding.
[00:04:10] So they didn't clarify like
[00:04:12] what that meant,
[00:04:13] anybody know what this is referring
[00:04:14] to?
[00:04:16] Yeah I think actually this is the
[00:04:18] a script demo I almost was going to do for
[00:04:21] today. It's being able to sort
[00:04:23] the linked records
[00:04:25] within a field by a particular
[00:04:27] field of that linked record.
[00:04:29] Right? So you can't,
[00:04:30] the only control you have over
[00:04:31] it is you can only drag them
[00:04:33] around manually
[00:04:34] and they're added in the same order
[00:04:35] that they're added.
[00:04:36] Like if you link records,
[00:04:38] you link 123, they're going to be
[00:04:39] in order 123.
[00:04:42] But you can change that
[00:04:43] by dragging them around.
[00:04:45] There's ways of scripting to
[00:04:46] be able to automatically
[00:04:47] sort that field but it
[00:04:48] would be amazing if we could
[00:04:49] just have a little toggle
[00:04:51] within that field configuration
[00:04:53] to decide what we want
[00:04:54] to sort by
[00:04:55] interesting but it doesn't look like
[00:04:58] it's live yet. No no I don't think so.
[00:05:00] I think that there's a little
[00:05:03] confusion over it. But
[00:05:05] yeah I'm not sure what they're,
[00:05:08] so that was the request.
[00:05:10] That was this request
[00:05:12] but it doesn't look like that's
[00:05:14] what they went live with.
[00:05:16] No, no it's not live.
[00:05:18] Do you think that's do you think
[00:05:20] that sorting would persist
[00:05:22] or is that supposed
[00:05:23] to be everywhere that that is set?
[00:05:25] It has one set of sorting or can you like
[00:05:27] reuse it in other places?
[00:05:30] It's a good question. I would
[00:05:31] think it would
[00:05:33] persist on whatever you would set it to.
[00:05:35] Right? So this linked record field,
[00:05:37] I want to be sorted by date
[00:05:40] and or I want to keep this alphabetical
[00:05:44] Yeah. Yeah I guess it's the same
[00:05:46] as applying the limit selection to view,
[00:05:48] right? It's set once between those
[00:05:51] those two tables.
[00:05:53] Not that it exists,
[00:05:54] but I imagine that's
[00:05:55] what the behavior would be,
[00:05:56] right?
[00:05:57] Yeah. I would think
[00:05:59] I would go crazy
[00:06:00] if that were released. That's
[00:06:02] like a huge thing that I use
[00:06:04] automation and scripting
[00:06:07] a lot to take care of.
[00:06:08] Like if I want my report
[00:06:10] that I'm generating to be
[00:06:11] sorted in a certain order
[00:06:12] then that's what you would
[00:06:14] need to do and this would solve that.
[00:06:17] Yeah.
[00:06:18] Yeah. So it doesn't appear
[00:06:20] that there's any ui changes
[00:06:22] that would reflect this.
[00:06:23] So maybe that was
[00:06:25] maybe that was an easter egg
[00:06:28] that they provided
[00:06:32] because they listed,
[00:06:35] they listed it as having gone live.
[00:06:39] Oh gosh, yeah, no that
[00:06:41] doesn't sound right.
[00:06:42] Yeah. And enough time has passed
[00:06:45] where it's not the Oh,
[00:06:46] just refresh your,
[00:06:48] you know, base and it'll be there.
[00:06:50] So yeah, I don't know
[00:06:51] what's happening with this
[00:06:54] with this.
[00:06:57] Yeah, apologies. I got
[00:06:59] I'm apparently I was confused
[00:07:00] at the top of this call as
[00:07:02] well. But that's what I would hope
[00:07:04] would be referring to but no,
[00:07:06] it's not released.
[00:07:09] So Kuovonne says I thought it
[00:07:11] was filtering by a specific record versus
[00:07:15] ah they did
[00:07:18] they did add that filter.
[00:07:21] That new filter
[00:07:22] option filtering, that makes sense.
[00:07:26] Yeah. Okay. Thank you, Kuovonne.
[00:07:29] Gotcha. So it's not in where you
[00:07:31] link to the record, it's at the top level
[00:07:34] filtering, it's the wording
[00:07:35] that's confusing, right?
[00:07:37] Because it starts with
[00:07:37] filter and then I'd sort by
[00:07:39] I don't think there's any sorting there.
[00:07:41] I see what they're trying to say that
[00:07:43] Yeah, yeah, that's that's where
[00:07:45] I got thrown off.
[00:07:47] But yeah, I think that that's
[00:07:49] what they were the comment below
[00:07:51] was saying. I think
[00:07:52] you're talking about this,
[00:07:54] but yeah, it wasn't
[00:07:55] unfortunately. Yeah. Gotcha.
[00:07:58] Alright. Maybe that's mystery solved.
[00:08:01] We'll see if there's if there's any more
[00:08:03] announcement will definitely
[00:08:05] bring it to you. But
[00:08:06] yeah. The other thing that
[00:08:08] eventually
[00:08:09] if they have the ability to like
[00:08:10] dynamically filter your link records
[00:08:13] off of a value in your current record that
[00:08:16] would be big.
[00:08:19] Yeah. So anyways. Alright,
[00:08:21] well maybe we got our
[00:08:23] hopes up a little too soon
[00:08:25] there.
[00:08:27] The other thing just coming from
[00:08:30] the Reddit community, this thread is
[00:08:34] about this smart sweet.
[00:08:35] I bet people I know
[00:08:37] Garrett did a video on this,
[00:08:38] so I kind of got some buzz.
[00:08:40] I know we talked about
[00:08:41] it in the BuiltOnAir
[00:08:42] community a little bit.
[00:08:43] It's not mainly what I want to talk about,
[00:08:45] although that I think that is interesting.
[00:08:47] It's a somewhat competitive product
[00:08:49] to Airtable. So if you're looking for
[00:08:52] an alternative, maybe check out Smart
[00:08:56] Sweet,
[00:08:56] but what was more interesting
[00:08:59] was in the comment sections
[00:09:04] this right here, as far as I know
[00:09:06] two way sync is coming to Airtable soon.
[00:09:09] Product keeps getting better.
[00:09:11] Where did you see this?
[00:09:13] What is two way sync?
[00:09:17] You know what, I feel like there was
[00:09:20] more discussion.
[00:09:22] All right, I gotta go down.
[00:09:24] It's gonna say,
[00:09:25] I thought I saw more
[00:09:27] discussion on that.
[00:09:29] Can confirm two way syncing is in beta
[00:09:32] right now. We're in said beta.
[00:09:34] It's pretty awesome so far
[00:09:36] any issues with it.
[00:09:37] No issues. It's similar
[00:09:38] and that you can't utilize
[00:09:40] linked to record fields and
[00:09:42] the destination base. You can't,
[00:09:45] you also can't make new records
[00:09:47] from the destination base,
[00:09:48] but overall it's a
[00:09:49] huge feature improvement.
[00:09:51] So that is pretty cool.
[00:09:53] I had heard through
[00:09:54] the grapevine that this was coming,
[00:09:57] but this is the first public
[00:09:59] where I felt comfortable sharing it.
[00:10:02] but so that's cool a two way syncing.
[00:10:04] So I think that's,
[00:10:05] I don't think that's with
[00:10:07] like external sources,
[00:10:08] like their one way sync
[00:10:09] with Salesforce or whatever,
[00:10:10] I think that's just within bases.
[00:10:15] although it is disappointing
[00:10:17] that you can't create a record,
[00:10:19] I think that would be a common use case
[00:10:21] to create a record on the,
[00:10:22] on the sync side.
[00:10:25] So I don't know any thoughts
[00:10:27] on two way syncing coming.
[00:10:30] I remember like forever ago
[00:10:32] when one way syncing was announced,
[00:10:34] they were like
[00:10:35] plenty of people were like, oh,
[00:10:38] it would be even more helpful if two way
[00:10:40] syncing was available
[00:10:42] and someone from Airtable was like, yep,
[00:10:44] we think it would be helpful too,
[00:10:46] and then that was kind of it,
[00:10:47] and that was like
[00:10:48] a year or more ago, so
[00:10:50] this is also the first time
[00:10:52] I heard that actual sort of
[00:10:54] progress had been made on
[00:10:59] you know,
[00:11:01] building that feature in there
[00:11:04] and I know there's people
[00:11:06] on enterprise plan here
[00:11:07] that may not be able to share
[00:11:09] what they know,
[00:11:10] so that's okay, but this is public,
[00:11:12] so we can at least share
[00:11:13] what people are saying publicly about it.
[00:11:17] Yeah, it's interesting though,
[00:11:19] because it's kind of the use case for,
[00:11:22] that seems like a good sharing
[00:11:24] permissions work around,
[00:11:25] like I'm just gonna
[00:11:26] create a version of my base,
[00:11:27] like it's kind of like
[00:11:29] the editable shared links,
[00:11:30] right? It's just another hacky way
[00:11:32] of us getting around the fact that sharing
[00:11:33] permissions are a bit dud.
[00:11:35] Yeah,
[00:11:37] but the difference there is
[00:11:40] you still have to be a
[00:11:42] paid editor tear to edit on
[00:11:43] the destination.
[00:11:46] Everything
[00:11:48] if everything is synced
[00:11:50] well I guess not everything
[00:11:52] would be synced just the same
[00:11:53] tables but if you're syncing over bits
[00:11:58] and everything in that new base is
[00:12:02] stuff that sync over.
[00:12:03] They don't need to be editor
[00:12:05] privilege because there's
[00:12:06] nothing to edit.
[00:12:09] Yeah,
[00:12:10] true.
[00:12:12] So that was cool. Cool.
[00:12:15] Little insight there
[00:12:18] on what might be coming
[00:12:20] a couple other things.
[00:12:23] This is from the BuiltOnAir
[00:12:25] community kind of our
[00:12:28] quarterly reminder of
[00:12:30] limitations on extensions.
[00:12:32] So somebody asked that actually
[00:12:35] did run into
[00:12:36] the limit of 10 extension types.
[00:12:38] Kamille I see you're on here
[00:12:39] Justin and scott also chiming in
[00:12:42] Kamille you want to give a summary?
[00:12:46] So there was some confusion
[00:12:49] about what the 10 extension
[00:12:52] limit actually means.
[00:12:54] I think the original assumption
[00:12:57] in this thread was it's 10 types of
[00:13:00] extensions you can have
[00:13:02] and then Justin and I
[00:13:04] clarified it's actually the number
[00:13:06] of installs, not the number of types,
[00:13:08] so if you had 10 charts that's hitting the
[00:13:11] limit if you have five charts
[00:13:12] and five page designers,
[00:13:14] that's hitting the limit
[00:13:15] and the scripting extension is
[00:13:17] the only one that's exempt
[00:13:19] from all of those and
[00:13:20] then if you make your own
[00:13:22] custom extension that's also
[00:13:23] exempt but that's that's
[00:13:24] rare and then
[00:13:26] I think scott jumped in and said
[00:13:29] well if you have disabled extensions those
[00:13:32] don't count. So there's a bunch of
[00:13:35] different things altogether that are
[00:13:37] affecting whether or not
[00:13:38] you're gonna hit that limit
[00:13:40] and I think it was
[00:13:42] you know the reminder to
[00:13:44] just disable an extension
[00:13:46] if you're not using it often
[00:13:47] is a good sort of
[00:13:50] Reminder that you know you can keep
[00:13:53] more than 10 in there, you just can't have
[00:13:55] them all active at once.
[00:13:58] Yeah.
[00:13:59] Yeah
[00:14:00] good reminder comes up probably quarterly.
[00:14:04] Alright moving on a couple
[00:14:08] a couple of announcements
[00:14:11] so if you are in the L.A. Area
[00:14:14] Airtable is doing a happy hour
[00:14:18] as part of a conference from adobe so
[00:14:22] Kuovonne or Kamille
[00:14:23] you will be there? I will.
[00:14:26] Alright so you can meet Kamille
[00:14:29] in person if you're in the area
[00:14:33] finally.
[00:14:35] Yeah. Yeah. I don't think
[00:14:37] I'll be in the area that day.
[00:14:40] I think it's October 17,
[00:14:42] is that when it was
[00:14:43] on a Monday.
[00:14:45] I actually don't know who in
[00:14:47] the Airtable sphere is also in Los
[00:14:50] Angeles.
[00:14:51] I feel like everyone's in Texas
[00:14:53] or Colorado Jordan's New York
[00:14:55] I think isn't she?
[00:14:57] I think yeah I think she's in
[00:14:59] New York so
[00:14:59] maybe Jordan will be there.
[00:15:02] Alright. Another one I found on
[00:15:05] twitter from Philip Lakin
[00:15:07] who runs a no code
[00:15:09] community putting on a conference
[00:15:12] a no code conference in Atlanta.
[00:15:16] no code ops conference so
[00:15:19] this fall to be determined
[00:15:22] on exact dates and I
[00:15:23] think just has kind of a sign up
[00:15:26] right now but it could be interesting.
[00:15:28] I don't know, maybe I'll take a trip
[00:15:30] out to Atlanta if this looks interesting
[00:15:32] but I thought I'd get the word out there
[00:15:35] if you're in that area I want to
[00:15:37] make a trip out there
[00:15:38] could be of interest.
[00:15:39] This one will be broader,
[00:15:40] it'll be more than just Airtable
[00:15:42] but definitely Airtable
[00:15:44] will be a
[00:15:45] major component of that.
[00:15:48] So that's kind of everything going on.
[00:15:52] Any other announcements,
[00:15:54] news going on
[00:15:55] in the communities this week?
[00:15:59] Not that I saw.
[00:16:01] Yeah, just always the ongoing
[00:16:03] help and everything,
[00:16:04] but I didn't see any breaking
[00:16:06] news just recovering from
[00:16:09] the contest I imagine so, no, no updates,
[00:16:14] but
[00:16:15] we shall see next week.
[00:16:18] All right, let's move on
[00:16:20] primary sponsor On2Air's
[00:16:22] an all one toolkit to run
[00:16:24] your business on Airtable.
[00:16:26] If you rely on Airtable
[00:16:27] as a core component to
[00:16:29] your business, you ought to check out
[00:16:31] On2Air to see if it can help with that.
[00:16:34] A variety of different apps
[00:16:36] that help you improve
[00:16:38] your business operations in
[00:16:39] Airtable
[00:16:41] for today's spotlight,
[00:16:42] I want to continue our discussion.
[00:16:45] We are in a
[00:16:46] open beta with our new forms product
[00:16:49] releasing new functionality,
[00:16:51] working with early customers,
[00:16:54] checking out the new forms solution.
[00:16:57] So we just did some
[00:16:59] additions this week.
[00:17:01] I thought I'd spotlight
[00:17:03] our formula builder.
[00:17:05] So we have the ability to
[00:17:07] run formulas on the fly client
[00:17:10] side because if you update
[00:17:12] any of your fields,
[00:17:14] your formula in Airtable
[00:17:17] isn't gonna update unless we
[00:17:19] sent it back to the server,
[00:17:20] which we didn't want to
[00:17:22] do until you're done
[00:17:23] and want to submit.
[00:17:25] So we have a client side
[00:17:27] Formula builder and engine that
[00:17:29] works with any of the fields
[00:17:30] as well as any of your
[00:17:32] linked record fields.
[00:17:33] So it can do roll up type
[00:17:35] formulas and anything of that sort.
[00:17:37] So that is
[00:17:40] a cool new feature and
[00:17:43] so we've got kind of a form builder
[00:17:46] that will improve
[00:17:47] over time but it does the basics
[00:17:49] you can insert your field,
[00:17:51] your variable parameters from your form
[00:17:55] and it will update there.
[00:17:57] And the cool thing is
[00:17:59] you can actually then save
[00:18:01] that value of that formula
[00:18:03] back into a editable text fields.
[00:18:06] So if you want to just run a formula here
[00:18:09] and then save the value of it back
[00:18:11] into Airtable, has that functionality.
[00:18:14] So very cool stuff coming.
[00:18:16] If you want to get into the beta
[00:18:19] will provide a link or reach out to us on
[00:18:21] chat
[00:18:23] and we'll get you in the beta
[00:18:25] for forms, a couple more weeks of a beta
[00:18:28] and then and then we'll be ready to
[00:18:31] release it to the wider community without
[00:18:34] going through the beta.
[00:18:37] What formula language?
[00:18:39] It actually is a it actually
[00:18:43] is a library that's more
[00:18:45] based off of Excel,
[00:18:47] so it actually supports
[00:18:50] all of the Excel formulas,
[00:18:53] so actually has more support
[00:18:55] than what Airtable has for some formulas,
[00:18:57] so we do have a help
[00:18:59] document that has all of the formulas
[00:19:02] and standard math.
[00:19:04] So it's
[00:19:06] so it's more about just kind of a
[00:19:09] formula engine off of off of Excel so
[00:19:11] but it does have some financial
[00:19:14] formulas as well,
[00:19:15] statistical analysis roll
[00:19:17] ups. So yeah, there's the list,
[00:19:20] so thanks for the question Kamille,
[00:19:24] can you copy paste Airtable formulas?
[00:19:28] Yes and no, some may copy over.
[00:19:31] But we do things a little bit different,
[00:19:35] especially with linked records if
[00:19:37] you're calculating like a roll up field,
[00:19:40] the syntax is is a little bit different
[00:19:42] there
[00:19:44] but basic formulas you likely
[00:19:47] would be able to copy over,
[00:19:49] may need to edit them a little bit
[00:19:52] But yeah, it's probably not a 1-1
[00:19:55] solution on that front.
[00:19:59] Alright, moving on,
[00:20:01] we're now going to dive
[00:20:04] into interfaces with Russ,
[00:20:07] You want to share your screen.
[00:20:11] There you go.
[00:20:13] Cool, so there was a very helpful
[00:20:16] introduction that Kamille
[00:20:18] did last week about
[00:20:20] how my wardrobe works
[00:20:22] as this is the set of interfaces
[00:20:24] that I submitted into the competition.
[00:20:27] I'm gonna run through two bits
[00:20:29] of functionality
[00:20:31] which are automation based just
[00:20:32] to dive into a little bit
[00:20:34] about how I did that.
[00:20:36] Some of it involves
[00:20:37] some scripting.
[00:20:38] My javascript is pretty poor
[00:20:41] to say the least,
[00:20:42] but it is good enough
[00:20:44] to put things like this together,
[00:20:45] which is hopefully a bit of a
[00:20:47] testimonial to no code tours
[00:20:49] is that you can be
[00:20:50] sloppy
[00:20:51] and still get the job done.
[00:20:52] I'll give a quick overview
[00:20:54] of what the interface and
[00:20:55] base does and then we'll hop into
[00:20:57] how some of the functionality works.
[00:20:59] Before I start, quick caveat,
[00:21:02] I am not a fashionable
[00:21:04] person and all of this
[00:21:06] effort towards collecting
[00:21:07] clothes and comparing and building outfits
[00:21:10] was just an idea of mine
[00:21:11] that doesn't actually
[00:21:13] really suit my lifestyle.
[00:21:14] You can ask anyone
[00:21:15] who knows me
[00:21:15] and they will tell you
[00:21:16] I'm not a fashionable
[00:21:17] person by any means,
[00:21:18] but maybe this will help you
[00:21:20] on that journey.
[00:21:20] I'd hope
[00:21:24] not your real clothing.
[00:21:26] No, none of them are in fact a slight tip.
[00:21:31] I actually just went looking
[00:21:32] for some quite nicely
[00:21:34] cropped clothes online,
[00:21:35] so they look good in the base,
[00:21:37] Maybe that was cheating, who knows.
[00:21:40] So just a quick kind of overview
[00:21:42] of what's happening in here.
[00:21:44] So we have the items table
[00:21:46] in my wardrobe
[00:21:47] and each item is categorized as a
[00:21:49] piece of clothing.
[00:21:50] So this interface
[00:21:51] here is the item gallery,
[00:21:52] it just gives you a rough breakdown
[00:21:54] of what you have in your wardrobe.
[00:21:56] And then it gives you a shortcut
[00:21:59] to go in and edit one of those items.
[00:22:01] For some reason it jumps you
[00:22:03] through the record there and then into the
[00:22:05] interface. But so that's
[00:22:06] that's items, you store metadata
[00:22:08] about your clothes.
[00:22:10] And then the point of the base
[00:22:12] is that you would then collect those into
[00:22:15] outfits. So in here this is what's called
[00:22:18] the outfit builder and create
[00:22:20] outfit interface
[00:22:21] basically you can hop through
[00:22:23] and change some of the layers in here.
[00:22:26] If you were watching last week
[00:22:28] you would have seen
[00:22:29] that none of these automations
[00:22:30] were working annoyingly.
[00:22:31] That's because you need
[00:22:33] the automations from the base
[00:22:35] to actually make it function.
[00:22:36] And the link that was provided
[00:22:38] I think was to universe, which
[00:22:40] as we all saw, doesn't copy
[00:22:42] of your interface,
[00:22:43] Your automation is for you.
[00:22:45] So that's why it wasn't working last time.
[00:22:47] But this is the these are the kind
[00:22:48] of to automations I want to jump into.
[00:22:51] One of them is about changing a layer.
[00:22:54] And the other one is saving an outfit.
[00:22:56] So I've made something that's
[00:22:58] fairly unwearable here
[00:23:00] through my six items of clothes.
[00:23:04] Each item has a layer,
[00:23:06] layer one, layer two.
[00:23:07] If I liked it enough,
[00:23:09] I can then choose to save my outfit
[00:23:12] and that will run an automation
[00:23:14] which basically takes a copy
[00:23:15] of the configuration we've got here.
[00:23:18] If you go into my outfits,
[00:23:20] you now have that outfit saved in here
[00:23:23] and you can also later on
[00:23:24] choose to edit it,
[00:23:25] which pushes it back into that
[00:23:26] interface
[00:23:27] and you can edit it again.
[00:23:30] So the first automation
[00:23:32] will have a look at
[00:23:33] and I'll go from the interface,
[00:23:36] you can see each of the steps
[00:23:38] that goes through is change
[00:23:41] so each of these buttons here
[00:23:44] updates and just try and zoom in.
[00:23:46] So you've hopefully got slightly better
[00:23:48] view here. So updates four fields.
[00:23:50] The first one is that it takes the current
[00:23:52] record that we're looking at.
[00:23:54] So right now we're actually
[00:23:55] looking at a single
[00:23:55] record called new outfit
[00:23:57] in the outfits table.
[00:23:59] It's the only one that has a
[00:24:01] flag on it, so you can't technically
[00:24:03] navigate away from it. But that is what
[00:24:05] allows us to have all of these
[00:24:07] linked items to this single record.
[00:24:09] And so what we're doing is
[00:24:11] we're updating the new outfit
[00:24:13] record to say I want
[00:24:13] to find something from upper
[00:24:15] which is this one we're
[00:24:16] about to change here.
[00:24:17] I want to change layer one.
[00:24:19] I'm going to run an
[00:24:20] automation called change
[00:24:22] and then I'm going to
[00:24:23] change the status to changing.
[00:24:24] So these first two is just sending
[00:24:26] some instructions to the automation we're
[00:24:28] going to run
[00:24:29] and then this last one
[00:24:30] here triggers the automation.
[00:24:33] The last point here where we
[00:24:35] change the status to changing,
[00:24:37] just updates this
[00:24:38] little status bar at the top
[00:24:39] to tell the user.
[00:24:40] I've actually clicked something
[00:24:41] that's actually a really important
[00:24:43] part of this and something
[00:24:45] that anyone who's
[00:24:45] built interfaces will will probably
[00:24:47] have figured out by now is that
[00:24:48] often an automation can take like
[00:24:51] at least four seconds
[00:24:52] if it's doing a find,
[00:24:53] sometimes 10, you know, depend on how I
[00:24:55] was behaving that day. So it's always good
[00:24:58] to update something on the screen
[00:24:59] to tell them things happening in the
[00:25:01] background before you just,
[00:25:02] you know, wait for an output
[00:25:04] and I'll demonstrate that for you
[00:25:05] in a second,
[00:25:06] there's a little bit of trickery
[00:25:07] around here that makes it seem
[00:25:09] faster than it actually is.
[00:25:10] So those are the four fields
[00:25:12] that we're going to change
[00:25:14] and if I hop into the base here,
[00:25:18] so as I said, we're now
[00:25:20] in the outfits table
[00:25:21] and this is the only record
[00:25:23] that we really care about
[00:25:24] this is a new outfit.
[00:25:25] The rest of them are all of my
[00:25:27] saved outfits that I got from before.
[00:25:29] So you can see here,
[00:25:30] if I just run that automation quickly
[00:25:33] will say change upper one,
[00:25:37] it's now changed these records
[00:25:39] in here to say upper body
[00:25:40] layer one,
[00:25:41] change, then updated some statuses
[00:25:44] so when it does that
[00:25:46] it is triggering
[00:25:47] an automation
[00:25:49] up here
[00:25:53] which for some reason
[00:25:56] the longer version wow
[00:25:59] this is actually quite a simple base,
[00:26:02] You might even give it a refresh
[00:26:04] and this is probably the first
[00:26:05] but when you realize
[00:26:07] that my scripting abilities
[00:26:08] are quite crap,
[00:26:09] I've got a separate automation
[00:26:11] for every version of the change
[00:26:13] button, I know that many of you
[00:26:16] out there would go, you fool,
[00:26:18] just have one automation
[00:26:19] and decide what to do at the beginning.
[00:26:22] But you know time is of the essence
[00:26:24] and it's a bit above my my skill set.
[00:26:27] So what we have just triggered there
[00:26:29] is this first one change upper layer one
[00:26:32] and what it does is it does a check to say
[00:26:36] has this run before or is this the
[00:26:38] first time it's running now,
[00:26:40] that's really important because
[00:26:42] if you run this
[00:26:43] automation to say first thing
[00:26:45] I want you to do is going to find records,
[00:26:47] find me all the other
[00:26:48] layer one upper body stuff,
[00:26:50] get me the next one and set it.
[00:26:52] That find is really slow.
[00:26:54] And it's it's far too long for you
[00:26:56] to wait to just wait for an image to
[00:26:58] reload, it was quite crappy experience.
[00:27:01] So what I did as a little workaround is
[00:27:03] that every time you run this
[00:27:05] I have a second field which is
[00:27:09] upper body one next
[00:27:10] and it basically sets up
[00:27:12] what the next one will be.
[00:27:13] So instead of waiting for the finds
[00:27:15] to happen, what I do is just update the
[00:27:17] record and I say get the,
[00:27:19] get the item that we prepared last time
[00:27:22] in the next up
[00:27:23] field
[00:27:23] and move it into layer one,
[00:27:25] so we don't have to wait
[00:27:26] for the find records to
[00:27:27] happen and the user sees
[00:27:28] what's happened in front of them
[00:27:30] and then afterwards I do the find
[00:27:32] where I need to find
[00:27:34] what the next item will
[00:27:35] be
[00:27:36] and with that find I then just push
[00:27:38] that data into the next up field.
[00:27:40] So the user never sees this kind
[00:27:42] of hidden next up field.
[00:27:43] It's only used for the
[00:27:44] outfit builder but it means
[00:27:46] they get a result quicker.
[00:27:48] That's like a little workaround
[00:27:50] that helps,
[00:27:51] that helps that be a bit smoother.
[00:27:53] So basically this check is just to see
[00:27:55] if we've ever populated the next up field
[00:27:57] before. So it's only like the
[00:27:58] first time you use this base,
[00:27:59] you actually you actually need to do that.
[00:28:01] we'll have a quick look at the
[00:28:05] script as well.
[00:28:07] I think it's fairly simple,
[00:28:13] which is lots of console logging and
[00:28:16] experimentation, but basically make a list
[00:28:20] of all the items that we have
[00:28:21] to find out what the
[00:28:22] current ones number was.
[00:28:23] Get the next number
[00:28:24] if there isn't a next number,
[00:28:26] go to the beginning of the
[00:28:27] list. So it's kind of just sifting
[00:28:29] through the array
[00:28:30] and whatever that item is,
[00:28:31] put it into the next up field
[00:28:33] for our next time that we run it.
[00:28:35] And so now you're seeing
[00:28:36] a bit of the inefficiency,
[00:28:37] right? Because you've all
[00:28:38] just realized that I've got
[00:28:39] this exact same script written
[00:28:41] 12 places. I'm just curious
[00:28:43] how much, how many scripts
[00:28:46] have you written before
[00:28:47] this, like how many?
[00:28:49] I've written a lot of scripts
[00:28:51] but I wouldn't want to
[00:28:52] share them with anyone
[00:28:53] because they're because
[00:28:55] they're poor
[00:28:56] and I just know enough javascript to
[00:28:58] get by and yeah,
[00:28:59] every every time I start writing
[00:29:02] a script I'm like okay I kind
[00:29:04] of know how variables work,
[00:29:05] I know how arrays work,
[00:29:07] but I still need to look
[00:29:07] up all of the, all of the
[00:29:10] syntax and make sure you know
[00:29:13] remember what a sync actually is
[00:29:15] but enough to do something
[00:29:16] simple like this, right?
[00:29:17] Like get an array of items,
[00:29:19] get me the next one and
[00:29:21] an update record is pretty simple to do.
[00:29:24] So yeah, so that is how those
[00:29:27] change buttons work and yeah,
[00:29:29] the trick there being is that don't
[00:29:31] make the user wait for the find records
[00:29:33] thing. Obviously your your base schema
[00:29:36] is a bit a bit luckier to have those two
[00:29:38] fields to do the same thing,
[00:29:40] but it means that the results
[00:29:41] come back within a
[00:29:42] few seconds instead
[00:29:43] of like 10 seconds basically.
[00:29:46] So yeah, that's the
[00:29:47] that's the update time,
[00:29:49] The other automation
[00:29:51] I'll take you through
[00:29:52] is how save outfit works.
[00:29:54] This one's a lot simpler
[00:29:55] and you may have probably
[00:29:56] guessed it now that you've
[00:29:57] seen the design of the base
[00:29:59] and specifically the items table.
[00:30:02] So we'll just have a look
[00:30:03] at the functionality of that button.
[00:30:06] I don't want to move it.
[00:30:08] Anyone who designs innovators
[00:30:10] in Airtable knows that that is a problem,
[00:30:12] click something and everything moves.
[00:30:15] So yeah so the first thing does
[00:30:17] run automation uses this,
[00:30:19] I use the select field
[00:30:20] to run the automations.
[00:30:22] It's an old way of doing it but
[00:30:23] the the newer way of using buttons
[00:30:25] to run an automation
[00:30:26] didn't exist when this
[00:30:27] contest contest started. So
[00:30:29] so that could be updated but
[00:30:32] and then also just changed
[00:30:33] the status so the user
[00:30:34] knows that something's
[00:30:35] happening.
[00:30:38] But you couldn't
[00:30:41] you can only have one action
[00:30:43] per button, is that right?
[00:30:45] Correct. So yeah
[00:30:48] I ran
[00:30:49] in and I guess from the automation
[00:30:51] you could update the field
[00:30:53] but you couldn't
[00:30:54] do what you were doing there
[00:30:55] exactly
[00:30:56] and that brings us back to exactly the
[00:30:58] same problem. Right,
[00:30:59] Because I'd be doing an update
[00:31:01] record which has a delay
[00:31:02] which you know,
[00:31:03] we've just seen on moving one
[00:31:04] thing to another.
[00:31:05] So I would imagine if we did
[00:31:07] like that it would be slower
[00:31:07] anyway.
[00:31:10] So yeah there is that
[00:31:12] and the save from automation
[00:31:15] is very simple because we
[00:31:17] have the exact same schema
[00:31:19] for this, you know,
[00:31:21] fake new outfit record into the
[00:31:22] ones below it.
[00:31:24] So when we set it to save,
[00:31:26] create a record,
[00:31:27] sorry, it's gonna grab
[00:31:28] all the information from the new outfit
[00:31:30] one which has all
[00:31:31] of the items
[00:31:33] and then create record
[00:31:34] in the same table
[00:31:35] and it just does a complete clone of
[00:31:37] all the information you give them to it
[00:31:39] and adds in a handy name which is
[00:31:41] outfit
[00:31:41] and today's date.
[00:31:43] And that is how you save your outfits.
[00:31:47] So those are the two.
[00:31:49] Automations.
[00:31:52] Very cool,
[00:31:55] awesome. It's cool that,
[00:31:58] you know, like just a simple
[00:32:01] two table base can
[00:32:03] generate like this kind of
[00:32:05] experience with the interfaces.
[00:32:07] Yeah, kind of what
[00:32:09] I wanted to do it as well
[00:32:11] right before without interfaces
[00:32:14] like that base would
[00:32:16] not be much to look at.
[00:32:17] This would be unwieldly. Yeah,
[00:32:20] if you were, if you didn't have interfaces
[00:32:24] you could still have done
[00:32:26] the same thing,
[00:32:27] set up the same automation and whatnot.
[00:32:29] But like to look at it all,
[00:32:31] I guess in a gallery view,
[00:32:32] but it would be,
[00:32:33] you know, it's so hard to edit anything
[00:32:36] in a gallery of you really can't do much
[00:32:38] in it other than just show you things.
[00:32:41] And so I was saying last week that your
[00:32:43] interface,
[00:32:45] I couldn't immediately tell
[00:32:47] that it was Airtable necessarily.
[00:32:50] It's you you came up with a layout
[00:32:54] and implementation that
[00:32:57] didn't like scream
[00:32:59] I'm looking at an Airtable interface
[00:33:01] and that you just sort
[00:33:02] of
[00:33:03] showed how flexible it was.
[00:33:06] Yeah, and and the nice thing of that is,
[00:33:09] you know, in my day job I run design
[00:33:11] Oxford Agency called Lighthouse.
[00:33:13] I do a lot of dashboard design and stuff
[00:33:15] that is very, very different to this.
[00:33:17] So it was a nice break to think about it
[00:33:18] more as like a consumer tools.
[00:33:20] I don't really get to do a lot of that.
[00:33:22] So yeah, it is, it is unique
[00:33:23] and I could do,
[00:33:24] you know, an interesting layout
[00:33:26] with the linked records
[00:33:27] and I rarely get to use galleries
[00:33:29] because we don't do
[00:33:30] anything that has imagery attached.
[00:33:32] So it's it was a nice excuse to
[00:33:33] make something a bit more
[00:33:35] attractive and less data heavy.
[00:33:38] I know you've come out with your
[00:33:41] own designs or improvements for
[00:33:44] the ui experience.
[00:33:46] I've seen some of your mock ups
[00:33:47] in the past.
[00:33:48] What's your wish list
[00:33:50] for interface designer? Well,
[00:33:53] interestingly, I've got a session
[00:33:55] on Thursday which I think a group of the
[00:33:58] winners are invited to
[00:33:59] to talk to the product
[00:34:01] team about improvements,
[00:34:02] interface designer.
[00:34:03] It's a it's a group session,
[00:34:06] so I feel like it might
[00:34:07] be the loudest voice
[00:34:08] gets heard. So luckily I've got
[00:34:10] quite a loud voice, so that should be all
[00:34:13] right for me.
[00:34:14] But yeah, to be honest,
[00:34:17] my main thing is partly around
[00:34:20] functionality and interface designer.
[00:34:22] So things like deleting a record
[00:34:24] when it's linked,
[00:34:25] I'm sick of like setting up
[00:34:27] these fake select automations to run
[00:34:29] like delete this thing.
[00:34:30] It's obviously a waste of all
[00:34:32] of our time to have that
[00:34:33] and write a little script
[00:34:33] that does it. So stuff like that just,
[00:34:36] you know, make things easier for me.
[00:34:38] I don't need to ask my users
[00:34:39] to go into the base
[00:34:41] just to delete something or you
[00:34:42] know, do some work around.
[00:34:45] my major gripe I suppose
[00:34:46] is just around the navigation
[00:34:48] and interface designer,
[00:34:49] we've seen from some
[00:34:51] of the previews that they are
[00:34:52] completely well not only
[00:34:53] overhauling the navigation
[00:34:55] for interface designer,
[00:34:56] but also just how this is all
[00:34:57] structured and making it feel
[00:34:59] more like a product
[00:35:00] that you built rather than a
[00:35:01] set of pages that people can hop between.
[00:35:04] So I know that that's on the roadmap,
[00:35:06] but yeah, things like if I had another
[00:35:08] section of interfaces outside
[00:35:10] of this one,
[00:35:11] you can't really get to them without
[00:35:12] going to the base,
[00:35:13] which is the noisy view
[00:35:15] and then going back in and you know,
[00:35:16] the navigation is just not easy there,
[00:35:19] especially if you want to move an
[00:35:21] interface from one section to another.
[00:35:23] It's impossible, which is
[00:35:25] which is a big problem
[00:35:27] when you want to change your
[00:35:28] site map for users.
[00:35:30] So yeah, yeah, a few things
[00:35:32] like that other big one as
[00:35:34] it is like numbers.
[00:35:36] So numbers are really lovely
[00:35:38] to have in an interface,
[00:35:39] right? Especially if you're putting
[00:35:41] together a dashboard of key figures,
[00:35:42] but we don't always want to have
[00:35:45] a number as being like go to a table,
[00:35:47] find me all of these things
[00:35:49] filter it. Like it might just
[00:35:51] be that this record
[00:35:51] has a column with a number on it.
[00:35:53] I just want to show that number.
[00:35:55] It's pretty simple.
[00:35:57] I like I care about the appearance of this
[00:35:59] and not so much the functionality
[00:36:01] of giving me the numbers.
[00:36:02] So just let me set
[00:36:03] any field to look like this
[00:36:04] with a label below it.
[00:36:05] It would just give me so much
[00:36:06] more control.
[00:36:09] Yeah. You know, colors
[00:36:11] give me some conditional colors as well.
[00:36:13] Like sometimes the numbers positive,
[00:36:15] sometimes it's negative.
[00:36:16] I don't want to have to make another field
[00:36:18] with an emoji in it that describes
[00:36:20] like how you should emotionally
[00:36:22] react to this negative number.
[00:36:23] So yeah, like stuff like that
[00:36:25] would just make it simple,
[00:36:26] right? Like we've got conditional
[00:36:28] colors in other places. You know,
[00:36:31] I agree with those last two bits
[00:36:33] or something the first time I pulled in a
[00:36:36] number component, I was like, oh,
[00:36:38] this is nice. And then I was like,
[00:36:40] why can't I
[00:36:41] why can't I use these? A little odd?
[00:36:45] And then the conditional color things,
[00:36:48] it's like throughout the product
[00:36:51] or throughout the interface section of the
[00:36:54] product, I noticed the
[00:36:56] other day that you could
[00:36:58] have a checkbox field
[00:36:59] and if you said it to large,
[00:37:01] it doesn't respect the color
[00:37:03] you applied to it in the
[00:37:04] field settings. It's just green.
[00:37:06] But I told you to be orange. Why?
[00:37:11] Oh yeah,
[00:37:14] Kuovonne had a question for you Russ.
[00:37:16] How do you see these techniques and other
[00:37:17] bases for other use cases?
[00:37:21] Yeah, I mean this the saving
[00:37:23] and clearing stuff. So this is kind of new
[00:37:26] behavior that I haven't explored before.
[00:37:28] Right? And that you have like
[00:37:29] an area where you can explore
[00:37:31] and then save things for later.
[00:37:33] The only problem with that,
[00:37:35] and it's kind of a metaphor
[00:37:36] for why we have forms is
[00:37:37] that this is a single user base, right?
[00:37:40] So if I share this with you guys and
[00:37:42] you you
[00:37:43] did. We'd be building an outfit together.
[00:37:45] We can't do it individually.
[00:37:46] So it makes it a little bit
[00:37:48] of a specific use case because yeah,
[00:37:51] it falls it falls apart as soon
[00:37:53] as two people are using this base.
[00:37:54] But the idea of cloning the record,
[00:37:59] I have, I have ideas.
[00:38:01] So you would need more.
[00:38:03] This is we're looking at one
[00:38:04] template record
[00:38:06] in your outfits table. Right?
[00:38:08] If you
[00:38:10] and I think you can do this by script.
[00:38:14] If you had one template record
[00:38:17] per collaborator,
[00:38:18] you can get all collaborators
[00:38:20] in a base
[00:38:21] using a script and then, you know,
[00:38:24] link them all to a record and
[00:38:26] use that collaborator assign it
[00:38:29] to a user field. Then this page could
[00:38:32] filter down and only show you
[00:38:34] the current collaborators template.
[00:38:37] And then, you know,
[00:38:39] it would work the same way.
[00:38:41] And you could choose to carry
[00:38:44] over the linked collaborator or not.
[00:38:47] Maybe you just have a table full of all
[00:38:51] outfits or you could have a table full
[00:38:53] of all out in each outfit is still linked
[00:38:55] to whoever made it. I guess it would
[00:38:59] it wouldn't carry over
[00:39:00] the created by field
[00:39:02] because it's created by automation.
[00:39:03] But you could
[00:39:05] you could use last modified
[00:39:07] because it does do the if someone
[00:39:10] clicks a button
[00:39:11] to change a single select field,
[00:39:12] it does respect who click that
[00:39:14] button as the last modified by
[00:39:16] I've been doing
[00:39:18] does it work if you have lots of like,
[00:39:20] I feel like if you threw enough people
[00:39:22] at it
[00:39:23] would get confused at some point.
[00:39:25] Last one of you do it.
[00:39:28] People clicked in quick succession
[00:39:30] then Yeah, I could step over each other.
[00:39:31] Yeah, but I mean, you know,
[00:39:34] that is a great kind of Stockholm syndrome
[00:39:37] workaround of how we could
[00:39:39] make this work for ourselves.
[00:39:41] But I really like this
[00:39:42] is what you want form designed
[00:39:44] to one day look like in Airtable,
[00:39:45] right? Like this could be a type of form
[00:39:47] that I've put together and behind the
[00:39:49] scenes. I'm building what each
[00:39:51] of these linked records is,
[00:39:52] but this is what the
[00:39:52] user gets, gets to view
[00:39:54] at the moment, you know,
[00:39:55] this is why people build
[00:39:57] form solutions on top of Airtable
[00:39:58] it is very basic,
[00:39:59] but it does give us that
[00:40:01] single opportunity where a
[00:40:03] user just sees what their input is and
[00:40:05] and that's it.
[00:40:06] but yeah, ideally this would be
[00:40:08] a kind of advanced form you could put
[00:40:10] together that is putting in link records
[00:40:12] and all that kind of stuff filtered by
[00:40:14] things that you should be able to see,
[00:40:16] that kind of thing.
[00:40:17] Yeah,
[00:40:18] Yeah, Kuovonne mentioned similar
[00:40:20] idea of using like folder for each user.
[00:40:24] That would be cool.
[00:40:25] I
[00:40:26] think we have to call it
[00:40:28] our wardrobe at that point, but
[00:40:30] nice, Well done. Thank you.
[00:40:33] Russ for showing that. Congrats.
[00:40:38] I assume you used
[00:40:39] your winnings towards your wedding.
[00:40:43] I mean, I don't have it yet,
[00:40:45] but it will go towards paying off
[00:40:47] congrats Russ just got married.
[00:40:51] Was able to dress appropriately
[00:40:53] for the, for the wedding.
[00:40:57] Very cool. Thank you for sharing that.
[00:41:00] We will continue on
[00:41:02] our next segment will
[00:41:05] be on page Designer with Alli.
[00:41:08] There you go.
[00:41:09] Excellent. Alright, so this is
[00:41:12] actually something
[00:41:14] I kind of have been playing
[00:41:16] with for a little bit
[00:41:18] and I just found an
[00:41:19] even easier way to do it.
[00:41:21] It's a little bit of setup
[00:41:23] on the back end,
[00:41:24] but it's super useful I've found
[00:41:25] for
[00:41:26] situations like this use case
[00:41:29] which is putting together
[00:41:31] a monthly ad out of
[00:41:32] some records in your base.
[00:41:34] It could also be useful
[00:41:36] for like a label use case,
[00:41:38] like if you had to
[00:41:39] print a sheet of labels.
[00:41:40] And essentially what's happening
[00:41:42] here is we're taking individual records,
[00:41:45] this is a base of inventory for a
[00:41:48] truck dealership happens
[00:41:50] to be my family's truck dealership.
[00:41:53] So I'm very familiar with it.
[00:41:56] This
[00:41:58] ad we would need to generate
[00:42:01] once a month and
[00:42:02] instead of having to train somebody
[00:42:04] on how to use Photoshop or
[00:42:05] a design or canva,
[00:42:07] I mean we do use canva, but
[00:42:10] this makes it a lot easier
[00:42:11] because we've got
[00:42:12] all of the information we need for
[00:42:13] the ad right in Airtable.
[00:42:15] So page designer works
[00:42:17] really well for if you need
[00:42:19] to create a sheet per one record.
[00:42:22] And that's really what it does is one page
[00:42:25] equals one record in a table.
[00:42:27] But you can use anything
[00:42:29] that's also linked to
[00:42:30] that record
[00:42:31] on that page as well. I've gone over
[00:42:33] the basics of page designer
[00:42:35] in an episode last year, which if anyone's
[00:42:38] interested, I think that would be
[00:42:41] a useful video to watch. But what's
[00:42:44] different about this is this
[00:42:45] actually has three different
[00:42:46] units on it and I'm
[00:42:47] gonna go over quickly
[00:42:49] how I got that to work.
[00:42:51] So over here I have a table
[00:42:54] called summary and on
[00:42:56] this table I have it linked to
[00:42:58] several different things
[00:42:59] throughout the base.
[00:43:00] There's a bunch of different
[00:43:00] things you can use this technique
[00:43:03] for but for now
[00:43:04] I'm gonna focus on just these
[00:43:05] two tables and then the
[00:43:07] all current inventory.
[00:43:08] So I've got summary.
[00:43:10] I like to use emojis
[00:43:11] for that record
[00:43:12] just cause it's gonna be appearing in all
[00:43:13] these random places
[00:43:14] and it just makes it a lot more fun.
[00:43:17] And then I've got my
[00:43:18] ad builder table.
[00:43:19] So this table
[00:43:21] just has three records on it,
[00:43:23] 123 which are these three records
[00:43:25] here.
[00:43:26] And because they're all linked
[00:43:28] to that summary record
[00:43:29] that allows me to get
[00:43:30] them all on this one page
[00:43:32] in page designer.
[00:43:34] So if I look at my settings here,
[00:43:36] I've got this pointed
[00:43:37] at my summary table.
[00:43:39] So I'm not gonna have,
[00:43:40] I'm only ever going
[00:43:41] to have one page here
[00:43:43] because I only have
[00:43:44] one record on this table
[00:43:46] if that makes sense.
[00:43:48] So because I've got these
[00:43:50] attachment fields in here
[00:43:51] on the summary table,
[00:43:52] I'm able to drag them in to page designer.
[00:43:58] Like if I wanted to put this
[00:43:59] phone number somewhere
[00:44:01] like these are just elements
[00:44:02] that maybe have made in Canva
[00:44:04] and put in dragged
[00:44:05] into Airtable as attachments.
[00:44:07] So that way I can drag them around
[00:44:09] my page and design
[00:44:10] like the template for my
[00:44:11] ad how I want it.
[00:44:15] Same with the background,
[00:44:16] the way I got that background
[00:44:18] to work is that's just
[00:44:19] the gradient image
[00:44:20] and I have it filled.
[00:44:22] I use the fill for the fit mode and
[00:44:25] then have it stretching
[00:44:26] over the entire page.
[00:44:28] Just makes it a lot nicer looking
[00:44:30] than a solid color.
[00:44:31] But here's where things
[00:44:34] get really cool
[00:44:35] so I've got each one of these units
[00:44:38] so this is linked to
[00:44:39] my all current inventory table.
[00:44:42] And then I'm able to pull in
[00:44:43] the specs about that unit
[00:44:45] and everything that I
[00:44:46] need to put on this page.
[00:44:48] And then I've got these three views
[00:44:51] here and this is where this is the most
[00:44:53] important part.
[00:44:54] I've got these filtered
[00:44:56] just by that slot number that I've set.
[00:44:58] So this view
[00:44:59] is gonna be for slot number one,
[00:45:01] this view for slot number two in
[00:45:03] this for slot number three
[00:45:05] and I have them locked because
[00:45:08] many reasons but mostly so that
[00:45:10] I myself don't forget
[00:45:12] and go here and change
[00:45:13] these filters looking for something else
[00:45:15] because that's really gonna mess up
[00:45:16] what's shown on this ad
[00:45:18] so I have them locked
[00:45:19] and if I try to unlock it it's
[00:45:21] gonna tell me lock for page designer.
[00:45:23] So I remember
[00:45:25] and also so nobody
[00:45:26] else messes it up either.
[00:45:29] And so if I let's say I'm gonna
[00:45:32] just like delete this one
[00:45:34] here so I can kind of
[00:45:36] show you how it's built
[00:45:40] oh just leave it there.
[00:45:42] So I want to find my
[00:45:44] linked record field
[00:45:46] for ad builder because that's on my
[00:45:49] summary table.
[00:45:50] I need information
[00:45:52] from these three records,
[00:45:54] so I'm gonna be
[00:45:54] pulling that field in.
[00:45:59] So if I pull an AD builder
[00:46:02] it's kind of hard to see there,
[00:46:04] but by default it makes it this table,
[00:46:06] right? So I could pull in
[00:46:08] the pics or whatever
[00:46:10] I might need about that unit,
[00:46:13] but it's all three of those units
[00:46:16] and it's all in a table format,
[00:46:18] so I don't actually want to
[00:46:20] continue with this.
[00:46:22] I'm gonna make a couple of
[00:46:23] little tweaks
[00:46:25] and you will see what that does.
[00:46:28] So if I only have
[00:46:30] the pictures as that data
[00:46:32] point that I want to pull in,
[00:46:34] I want to just do just the first image
[00:46:37] and I actually don't want
[00:46:40] any headers
[00:46:43] and I also don't want
[00:46:45] any borders on my table.
[00:46:48] And then here's the part
[00:46:50] those views come into play
[00:46:51] because right now I've
[00:46:52] got just those three photos,
[00:46:55] but I only want the one.
[00:46:57] So this filter records
[00:46:59] option here.
[00:47:01] If I make this slot one
[00:47:04] and I'm only gonna have
[00:47:06] my image for that one unit.
[00:47:09] So if I make this the same size
[00:47:11] as everything else,
[00:47:12] just kind of drag it around
[00:47:15] And then I know I made
[00:47:17] all of the other ones 200.
[00:47:19] This is a weird little bug, you can't
[00:47:22] are over typing that number.
[00:47:24] So now I've got that
[00:47:27] and I have a border around it,
[00:47:30] like the others wanted to
[00:47:33] be white,
[00:47:36] this needs to go into the front,
[00:47:38] so this is kind of handy,
[00:47:39] you can arrange these
[00:47:40] so if I bring that to the front
[00:47:42] then that comes
[00:47:43] up nicely,
[00:47:45] want that to be a little bit
[00:47:47] further down
[00:47:50] and then this needs to go
[00:47:52] to the front as well.
[00:47:56] And so this is another
[00:47:57] just a detachment image
[00:47:59] that I have on the summary table,
[00:48:00] that little starburst thing.
[00:48:04] Now I can make everything there.
[00:48:07] I'm just gonna duplicate this
[00:48:11] element
[00:48:13] because once you get one
[00:48:14] of these set up
[00:48:15] it makes it super easy because you can
[00:48:17] just do this duplicate it
[00:48:19] and then go change the slot number
[00:48:22] to which one you need
[00:48:25] so I'm gonna duplicate this
[00:48:31] and
[00:48:33] right over
[00:48:35] and then
[00:48:36] move that to slot one.
[00:48:41] So now I've got all of my images
[00:48:43] in there,
[00:48:44] all of my slots set up and the
[00:48:46] cool part about this
[00:48:48] is now all I need to do for next month.
[00:48:50] If I need to change out the units
[00:48:52] I can just come here get rid of it
[00:48:55] that's there because I have
[00:48:58] this override specs here
[00:49:00] have places on these
[00:49:02] records here where I can actually
[00:49:04] override what's written here
[00:49:06] just in case the
[00:49:06] system doesn't have correct data
[00:49:08] or it's missing data.
[00:49:10] But now I can just go ahead
[00:49:12] and pick another unit
[00:49:13] and it's gonna populate with
[00:49:16] that imagery.
[00:49:20] I got rid of all my overrides
[00:49:23] so you can see this one actually
[00:49:25] does not have ad specs.
[00:49:26] So that's where I would
[00:49:27] need to use my override
[00:49:29] like this truck. It is awesome.
[00:49:34] And then
[00:49:36] yeah that's
[00:49:37] that's basically it.
[00:49:38] I mean I didn't get
[00:49:40] super super crazy with this but
[00:49:43] you can switch out your stuff
[00:49:45] and then if I need
[00:49:46] to put something else in that
[00:49:47] little starburst, I can say this is a bus.
[00:49:55] Sometimes you know it's not perfect
[00:49:57] because it's not gonna adjust the text
[00:49:59] for you so I might need to go
[00:50:01] back in and like click on
[00:50:03] this and make the line
[00:50:04] height a little smaller
[00:50:07] you know, adjust as needed. But it makes
[00:50:11] it really saves a lot of time.
[00:50:16] That's so cool. That's awesome.
[00:50:19] Thank you.
[00:50:20] That's great. And also very
[00:50:22] easy for someone else
[00:50:23] to come along and just set up
[00:50:25] another three units
[00:50:26] on there and export it.
[00:50:28] That's awesome. Exactly.
[00:50:30] Yeah it works out really well
[00:50:32] and I have my live version.
[00:50:33] I have a couple of
[00:50:34] different sizes.
[00:50:35] We've got one that's got like 12 units
[00:50:38] and then another that
[00:50:39] only has six and then three
[00:50:41] just for the different sizes that we need.
[00:50:44] And yeah it's super flexible
[00:50:46] and nobody needs to
[00:50:47] learn how to use Photoshop.
[00:50:50] Yeah.
[00:50:52] Very cool. Thank you Alli
[00:50:54] for sharing that.
[00:50:57] Get some shout outs
[00:50:59] from Kuovonne and Scott in here.
[00:51:05] Scott's going to buy a big rig.
[00:51:10] Next we will give a quick shout out
[00:51:12] if you're not in the BuiltOnAir
[00:51:14] community, we want you in there
[00:51:17] join us,
[00:51:17] there's thousands of Airtable users in
[00:51:19] there helping each other out,
[00:51:21] talking about
[00:51:22] the latest and greatest of Airtable.
[00:51:24] So if you are an Airtable fan
[00:51:26] then you need to join us
[00:51:28] at builtonair.com/join
[00:51:30] love to have you with us.
[00:51:33] Our final segment will be scripting time
[00:51:36] with Kamille.
[00:51:39] Okay, so this is
[00:51:41] kind of inspired by a
[00:51:43] client project that I had recently
[00:51:46] worked on that I thought
[00:51:48] the basic premise
[00:51:50] has a lot of use cases
[00:51:53] and I think it's been covered in
[00:51:55] various different ways
[00:51:56] and actually the way it
[00:51:58] was done for this client is
[00:51:59] different from how I did it today.
[00:52:01] But essentially what we have
[00:52:04] in this like demo base
[00:52:06] I have is a couple number
[00:52:08] of projects in each project
[00:52:10] is a type
[00:52:11] whether it's minor average or major,
[00:52:13] you'll see I have a number
[00:52:16] of required tasks. If I go to my
[00:52:19] levels or categories or whatever
[00:52:22] for my projects. Minor average major.
[00:52:25] I could see each one of those
[00:52:28] is linked to a number
[00:52:30] of template tasks and if I
[00:52:31] go to my template tasks,
[00:52:33] I'll see I have a couple
[00:52:35] of routine things I do for
[00:52:36] various different types of projects
[00:52:39] and some of them
[00:52:40] are applicable to all types
[00:52:42] of projects and some are only apply
[00:52:44] to one or two types of projects.
[00:52:47] And that's how you get varying numbers of
[00:52:50] required tasks for each type.
[00:52:53] And the idea is when you
[00:52:56] create a new project and
[00:52:59] you want to apply all of the tasks to
[00:53:02] each project based on its type,
[00:53:05] you want to do that pretty easily but you
[00:53:08] don't want to override any tasks
[00:53:10] that are already in there.
[00:53:12] So if I go to my
[00:53:13] task table, you'll see that the m
[00:53:16] court project has a couple of the template
[00:53:19] tasks already in there
[00:53:21] that are accurately assigned. And so
[00:53:25] the idea was to create a script
[00:53:27] and there's a bunch
[00:53:28] of different forms of this
[00:53:29] script that exist already.
[00:53:31] But what mine is doing is it's looking at
[00:53:34] the
[00:53:36] type for each project,
[00:53:38] looking at the template tasks
[00:53:40] that are required of it
[00:53:42] and then adding only the template task
[00:53:45] that don't already exist in the tasks
[00:53:47] table. And hopefully that makes sense.
[00:53:50] The script is not,
[00:53:53] you know exciting to look at.
[00:53:55] So I'm just going to run it
[00:53:57] once and then explain
[00:53:58] what happens and hopefully
[00:53:59] I don't run into an error.
[00:54:04] Okay, so what's happened
[00:54:07] in a little bit a little bigger,
[00:54:12] so nothing actually got copied over to the
[00:54:18] task table and do that sort of by design.
[00:54:21] What's happening is it's out
[00:54:23] putting a table of records
[00:54:25] that it will create
[00:54:27] when I remove the comments out of
[00:54:29] that section of the script,
[00:54:31] so you can see it's linking
[00:54:34] to each of the projects
[00:54:35] and then linking to the
[00:54:39] relevant template. So I go into
[00:54:44] my script,
[00:54:45] you'll see it's not particularly long,
[00:54:48] it's under 50 lines
[00:54:51] and if I can explain,
[00:54:53] hopefully it's big enough
[00:54:55] what each section of the script
[00:54:57] is doing, it's not doing it
[00:55:00] on a single project
[00:55:02] is looking at the entire
[00:55:04] projects table and then it's
[00:55:08] going through each project,
[00:55:11] it's looking at what
[00:55:13] type of project it is then
[00:55:16] looking at each type,
[00:55:18] all of its template tasks
[00:55:20] and then finding which one of
[00:55:22] those is missing.
[00:55:24] And then if it's missing then
[00:55:28] it's going to create a new record
[00:55:31] in the task table linked to both.
[00:55:33] Now that I look at this,
[00:55:35] this is actually backwards,
[00:55:37] so I'm going to
[00:55:39] fix that really quick
[00:55:40] and then I'm going to remove
[00:55:43] the comments so that now when
[00:55:44] it goes through
[00:55:46] it should hopefully
[00:55:48] actually create these records
[00:55:50] if I exit out of here
[00:55:53] and click finish,
[00:55:57] finish editing. Now, if I click run
[00:56:00] and cross my fingers.
[00:56:03] Okay, so it worked.
[00:56:05] So now it's gone in and added
[00:56:08] all of the appropriate tasks
[00:56:11] for each project.
[00:56:12] If we go down to elm court,
[00:56:14] you'll remember this already had a
[00:56:16] couple of template tasks
[00:56:18] in there already.
[00:56:19] None of these are duplicates because
[00:56:21] it saw this one was already in here,
[00:56:23] I don't need to create another one.
[00:56:28] Gotta give
[00:56:29] Kuovonne is impressed with your
[00:56:31] flat map usage, you know,
[00:56:33] good old flat map when
[00:56:35] I when you start dealing with
[00:56:38] javascript and arrays and
[00:56:40] something like scripting an Airtable
[00:56:43] where you're oftentimes creating an
[00:56:45] array of records,
[00:56:49] record values that you want to create.
[00:56:52] If you have to deal with linked
[00:56:54] records, you might end up doing
[00:56:57] what I'm doing which
[00:56:59] if I make this big again,
[00:57:04] I'm looking at,
[00:57:05] I'm going through each project record
[00:57:08] in my base so there's
[00:57:10] three of those
[00:57:12] and then I'm getting
[00:57:14] The template that it's applied to
[00:57:17] in this case I think
[00:57:19] Elm Avenue or Grove or
[00:57:20] whatever had the average
[00:57:22] template assigned.
[00:57:23] So I'm now I'm looking at the linked
[00:57:25] record to the project
[00:57:27] and then that linked record
[00:57:29] has a whole bunch of other
[00:57:30] linked records.
[00:57:32] So the template has something like seven
[00:57:36] linked records
[00:57:37] that I may or may not have
[00:57:38] to create and that's an array,
[00:57:40] but I'm already inside of another array.
[00:57:42] That array is the projects.
[00:57:43] So what flat map does,
[00:57:46] it prevents you from having
[00:57:49] an array inside of an
[00:57:51] array. What it does is it just sort of
[00:57:55] outputs a single array of updates because
[00:57:58] that's effectively what I want
[00:58:00] at the end of the day,
[00:58:01] I only want one array of
[00:58:03] updates. I don't care how many,
[00:58:05] you know, projects are being assigned
[00:58:07] to it. It it doesn't really matter.
[00:58:09] You can see they're all sort of
[00:58:12] lined up by how their
[00:58:15] how they're ordered in that first view,
[00:58:18] but it, you know, I don't need a
[00:58:20] separate array for each batch of project.
[00:58:24] Something that I could have done and
[00:58:26] chose not to do was at the bottom of,
[00:58:29] you know, instead of using a flat map,
[00:58:31] use for each or something,
[00:58:34] and then at the end of that for each,
[00:58:36] create those records
[00:58:38] for that particular project,
[00:58:40] then moved to another project
[00:58:41] and create those records and then move on.
[00:58:44] I think it's often times more efficient
[00:58:47] to update them all at once,
[00:58:50] so your script doesn't
[00:58:52] get stuck in this array.
[00:58:56] And then there's
[00:58:59] kind of like it's like spreading
[00:59:01] the array and like it's spreading,
[00:59:04] which is like if I had something
[00:59:07] like down here and said let
[00:59:11] spread equals
[00:59:14] right, It's it's doing that
[00:59:16] basically right now. That's cool,
[00:59:19] I didn't know about that,
[00:59:20] I'll definitely have to try that out.
[00:59:21] Flat map. It's so many
[00:59:24] I think I found flat map
[00:59:26] when I was doing Master
[00:59:28] Calendar because Master Calendar
[00:59:30] was very similar
[00:59:31] in that I had all of these
[00:59:33] different arrays,
[00:59:34] but I just had one calendar
[00:59:37] and I don't need,
[00:59:38] you know, all of these things nested,
[00:59:40] I just need a list of events and
[00:59:43] you know,
[00:59:44] flat map game changer,
[00:59:46] you're using slice and
[00:59:49] dice. I know
[00:59:50] and the reason I'm glad
[00:59:52] you brought that up, is it,
[00:59:54] I did it wrong down here. If I do
[01:00:01] hold on
[01:00:05] and now I have to delete some records
[01:00:07] so you can see what what I wanted to do.
[01:00:10] I'm going to delete these
[01:00:12] because if I ran this again it
[01:00:14] would create no records
[01:00:15] because no records are missing.
[01:00:17] If I run it again
[01:00:19] hopefully it'll do the thing.
[01:00:23] Yeah. So the reason I didn't use splice,
[01:00:27] I used slice is because I wanted to
[01:00:31] output. Imagine I had like
[01:00:32] hundreds of records
[01:00:34] I needed to create which I had to
[01:00:36] do in my client case.
[01:00:37] It was a data migration thing.
[01:00:40] We were migrating thousands
[01:00:41] of records. I think we ended up
[01:00:44] at like 42,000 records.
[01:00:46] What I wanted was each
[01:00:47] batch that you're doing,
[01:00:49] tell me what record were currently
[01:00:52] what project were currently on
[01:00:54] so that if I run into an error.
[01:00:56] I know okay I could pick back up
[01:00:59] from this record I. D.
[01:01:00] And not do the whole
[01:01:01] thing over if I need to make some
[01:01:03] adjustments in my script.
[01:01:04] If I used splice it would have been
[01:01:08] a little bit harder to have this sort of
[01:01:12] output but it's not necessary.
[01:01:14] I think I still could have done it.
[01:01:15] It just would have been
[01:01:17] a little bit difficult
[01:01:19] but with the second run
[01:01:20] you could see only two records
[01:01:21] are created because the other two projects
[01:01:24] that all of their necessary tests
[01:01:25] already in here and the two
[01:01:27] that I deleted
[01:01:28] are the two that are missing and
[01:01:29] that's why only two were created here.
[01:01:31] Okay. You got to run it one more time
[01:01:33] just to make sure it doesn't create any
[01:01:36] Yeah, I didn't build it in any sort of
[01:01:38] error handling in this demo.
[01:01:40] So nothing should happen.
[01:01:43] All right.
[01:01:45] Nothing
[01:01:47] worked.
[01:01:49] Awesome.
[01:01:51] Very cool. It's great to always
[01:01:54] get into the scripting world
[01:01:56] and hopefully give
[01:01:57] people a little bit of desire
[01:02:00] to dig in and do some scripting
[01:02:02] and utilize flat
[01:02:03] map.
[01:02:06] It'll save you time. Yeah.
[01:02:08] Kuovonne also noticed,
[01:02:09] I was also going to bring up
[01:02:11] your interesting filter X equals
[01:02:12] X to get rid of nulls.
[01:02:15] So that's the other thing when you have
[01:02:22] one more time my computers
[01:02:24] are running a little slow. Sorry.
[01:02:26] So what I'm doing here,
[01:02:28] missing templates
[01:02:30] is finding all of the template
[01:02:32] tasks that aren't already,
[01:02:34] you know, created in the actual task table
[01:02:37] for that particular project.
[01:02:38] And the example we just did
[01:02:40] right, two of the projects
[01:02:42] at all of their tasks
[01:02:43] already in there.
[01:02:44] There are no missing templates.
[01:02:46] So this map,
[01:02:46] it's not going to throw an error
[01:02:48] it is going to be an
[01:02:49] empty array and if I tried
[01:02:51] to pass that to this,
[01:02:53] create records a sync thing,
[01:02:57] an array with a bunch of stuff in it
[01:02:59] and then a couple of empty
[01:03:02] just a couple of no values.
[01:03:03] Airtable is going to be like,
[01:03:05] I don't know what to
[01:03:05] do with this. I can't update a null record
[01:03:08] or create a no record that you didn't,
[01:03:10] you didn't give me any information.
[01:03:14] So at the end of my
[01:03:16] variable that's creating this updates
[01:03:19] array at the bottom, it says X filter X
[01:03:22] equals X. That's just basically
[01:03:25] saying is there anything there?
[01:03:27] I don't care what it is.
[01:03:29] As long as it's not null or undefined,
[01:03:32] then keep it in the array.
[01:03:33] If it's null or undefined,
[01:03:35] remove it from the array,
[01:03:36] which means this at the bottom
[01:03:38] now has clean information to get with.
[01:03:41] And as long as I've mapped
[01:03:43] my fields appropriately,
[01:03:44] then it should create
[01:03:45] the records with. No problem.
[01:03:48] Love it.
[01:03:50] Great stuff.
[01:03:51] Thank you. Kamille,
[01:03:53] that is a wrap for this week.
[01:03:55] Thank you Alli and Russ.
[01:03:56] Thank you for joining us.
[01:03:58] And as always, we will see you guys
[01:04:01] next week on a new edition
[01:04:03] of the BuiltOnAir podcast.
[01:04:04] Until then we'd love to
[01:04:06] see what you all build on air.
[01:04:07] Take care