Documint: Webflow for Documents

Looking for a way to generate quotes? Documint Founder Josh Mamroud shows how to autocreate documents using data from your Airtable base.

Resources

Transcript

Josh Mamroud: I think there's a need for this because there's no product out there. Like kind of every space has got one. Hey Josh.  

Aron Korenblit: Hey Josh. We're gonna, I have, uh, I've I've terrible news. I, uh, I didn't go live, so I don't know where we are. Uh, can folks, let me, so no, we should be live now. We should be live. Should we should be good? 

Okay. Um, so can folks just let me know that we are live in the chat? So there was a small configuration issue. We're starting 10 minutes late. Could folks, can you tell me in the chat, if you're able to go back and see what we did in the last 10 minutes? So, or are we starting from here? So let me know in the chat, 

Josh, I will owe you one. This is on me,  

Josh Mamroud: completely. The joys of doing this log, right?  

Aron Korenblit: Okay. So Marcel, could you let me know if you're able to see the playback for nine minutes before. So, what I mean by that is, you know, can you see what we did since the beginning? Or can you just now see the last 30 seconds? 

Because if it's the last, Hey, everyone, it's the first kind of official stream of the new year, so I've forgotten how to do this. Um, and Josh, I owe you an apology for that. Nope. Only one minute back. Okay, cool. So. Uh, we are gonna start over.  

So Josh, welcome to "Automate All the Things", uh, am so excited to have you here and I'm happy that we can start from scratch. 

So Josh, how about introducing yourself once again to everyone including me, uh, and talking a little bit about.  

Josh Mamroud: Sure. Yeah. Aaron, thanks for having me, uh, excited to be here.  

My name's Josh I'm the founder of document. It's a low code, no code document automation. Sorry. Solution service, um, primarily focused on air table at the moment. 

And, um, the kind of story behind it is that I was working for my family business and, um, was implementing a, was working on implementing a ERP. And the last part of that European implementation was a configured. Tool that, um, the family business is a 30 to 40%. It has a 30 to 40 person sales team and in home sales team and they were going to be configuring kitchens I'm using then not just kind of standard kitchens, they were all going to be highly customized kitchens. 

And so, um, we were switching over from a paper contract, um, method of pricing out of these kitchens to a configurator that then output a, a document that the customer could sign, you know, everything. Accurate, all the items, all the prices, everything was, um, you know, done right, and was supposed to eliminate a lot of errors. 

So spent a couple of months building that CPQ configure price quote. And at the end of it needed to, like I said, create that document and that document, wasn't just a straightforward document. It had a lot of logic built into it. And so when looking for solutions that were going to be easy to, or, you know, simple to. 

Maintain, they could, you know, handle that logic that was necessary, needed to have looping conditional statements. Um, and, uh, you know, anything after that was kind of gravy, but you know, there wasn't really anything out there that could do it. You know, I tried about 12 to 15 different solutions and kept hitting the wall pretty quickly with all of them. 

And then there were other ones that were just way too expensive for what we needed it for. And so, uh, ended up building a. Accustomed version one, if you will, a document, um, for my family company. And then, um, when COVID hit is when I stepped out and I'd been planning to do that anyway. Uh, but the project was over, so it all kind of came together. 

And, uh, you know, I was playing golf with my best friend and talking about just, you know, the project that I was working on and said, you know, there's really nothing out there. And, you know, I was trying to figure out what my next steps were going to be. And I said, okay, well, you know, why don't I start working with. 

Building this tool that I thought was already out there and you know, it should have been out there and that's kind of the Genesis document and where it all started. And so spending a year building it and then launched early in March of last year or yeah, late March.  

Aron Korenblit: Yeah. So for folks. Document is kind of like, uh, what I was saying is like this, this, this ability to remove what I think is one of the biggest frictions, uh, I don't know if ever is the right word, but like, in my experience, someone would be like, Hey, do you want to like consult for a couple hours on, on whatever? 

And I'm like, you know what? Yeah, maybe I can make a little bit of money, but I have to like create a manual PDF and the pain of creating that PDF turns me off of that work. I'm like, oh, you know what. I'm just not going to do it. I don't want to create that invoice. And so it sounds like document could solve that for me, but more broadly for folks who create documents all the time. 

Right? So whether it's invoices contracts, so before we jump into it, you know, uh, quickly, what are some of those use cases that folks could be like, oh, this could be a right solve for those types of use cases.  

Josh Mamroud: There's I mean, Starting this I've seen so many different types of documents and templates, but the ones that keep kind of coming up are, you know, big ones, invoices, um, agreements, contracts, quotes, um, we have a, you know, like product brochures stuff that basically anytime you have these transaction documents where you're going to be, you have. 

The same template, right? Anything that like, just think, you know, to the people watching this, um, do, are you kind of maintaining a Microsoft word document or an Excel sheet that you're constantly going into and then swapping data out? The structure of it stays the same, like, you know, an invoice, but the data is changing. 

Right? And so those things where you're saying, look, why am I wasting all this time? Doing these manually, you know, there's gotta be a way to automate it. That's where document comes in and document can take those, you know, you just create that template that you have in word or Excel, and then you create it in document. 

And then you can just, you know, feed your data in from whatever data source you're using. And it will create documents for you automatically.  

Aron Korenblit: Amazing. Okay, cool. So  

I think let's jump into the actual use case because I was a big new, you know, 15 minutes ago and I completely forgot to go live. Um, so chalk that up on me folks. 

Um, okay. So, um, you know, our, I think use case, where can I kind of jump into here is this example of a quote, right? So, you know, we're obviously gonna assume we manage. Accounts and CRM or, you know, in air table. And our goal is to be able to have this, like this button or orders. Right. Which is like, okay, let's create a document. 

Right. So that is our goal for today. Um, do you want to walk us through the base or, or show.  

Josh Mamroud: Um, either one, uh, it's just a pretty straightforward base. You got, you know, accounts and those are going to be different customers that you have, uh, then orders are going to be related to accounts. So an account can have multiple orders. 

It's going to be the group really for whatever's being sold is going to have the total amount. It's going to have the links to the individual line items, and then you have the line item table. And that is, um, just, you know, connecting basically the products. The orders and so that you can keep a list of products and then you just, the line item will say, okay, this product was sold for this order. 

And you create as many of those as you need for the, uh, for the order. And then, um, yeah, that's about it. Yeah,  

Aron Korenblit: kind of. So I've got accounts and orders are jumbling line items together. This is a junction table between. You know, uh, the order and the product, right? So we're able to say, you know, this order has these products and this is just kind of what we sell, right? 

So you can buy matches, you can buy, you know, smoke bomb screen. I really liked this example. Uh, um, and our goal here, you know, is this ability to say, okay, well, this order, I imagine. Would be like, okay, I'm going to take this name. I'm going to go to some PDF and I want it to replace the top with the name. 

Then I want, you know, a list of line items each with their image that subtotal, I need to add tax. I need to just actually talking through this is giving me a little bit of a, like, my heart starts jumping and figuring like, I'm like, okay, I need an Excel sheet. And then I'm probably going to print that Excel sheet. 

But what happens if it's like more than one page or all that good stuff. So our goal here. Is actually to have a button and, you know, that's, that's always near and dear to my heart is just to have a button that automates that stuff that takes all of this information from orders and it outputs a PDF that we can send through. 

So a data analytics shared some examples of things. Uh, you know, they want to automate, which is pitch decks, valuation reports, business presentations. Um, in this case, we're going to do orders, right? Um, okay. So let me know in the chat, if there are any questions around the base structure, uh, you can also get the base itself if you want to kind of follow along, but relatively simple base, uh, that we can expand on. 

So how do I go about integrating these different fields with document?  

Josh Mamroud: Yeah. Great question. So what y'all want to do is obviously first you got to have a document account. So head over to document.me, uh, sign up, you've done all that gray we're in your account. And so what we'll do now is we will create a template. 

And when you create a template, you have a couple of different options. You can start from a blank template, or you can start from a pre-made template. And just to save us some time in this case, we'll start from the invoice since that's what we're trying to create. So we will, uh, let's start with that template. 

Perfect. Yup. And now this is the,  

Aron Korenblit: this is, this, got some stuff in it. This is cause you know, uh, I'll be honest. I'm used to like page designer. This is like page designer plus plus plus plus plus, so talk me through what I'm, what I'm seeing here.  

Josh Mamroud: Yeah, yeah. Uh, there is, we're working on making it, you know, more like kind of tokenized and less of the, you won't see the syntax and all that. 

You won't see like the double curly brackets and all that pulling in your fields from air table. These are all things that are coming down the line, but.  

Right now, um, we are looking at, we have on the left-hand side, we have two panels and then the center is our canvas. Um, on the left first you have the ad tab and that's going to be the different page elements that you can add to the page. 

Um, there's two types of page elements, there's layout elements, and there's content elements to the layout. Elements are used to kind of structure how you want everything to be shaped. A lot of documents these days, aren't just the straightforward long form text document there. You know, you want to have some design and style in there and that's where the layout elements come in and then you have the content and that's what you can add. 

Text images, space breaks, that sort of thing. Then you have, when you select an element, you know, those elements will have properties that you can. Um, and that's what the property is right now. It's selected, but now you've cited that, and then these are the different properties that you have and you can kind of really tailor it to look exactly like you want it to look. 

And, yep. And so, um, and then on the right-hand side is where you see your variables and this is where you're going to integrate with. In our case air table. Um, these are kind of the contextual variables. So these are variables. That document has identified that are in the template. Like once you add them, that's how they get to the template that, so they get added to that list over here. 

Um, and that's what we're going to kind of line up with, uh, air table and REO table base and Table. And then on the right side or the layers tab, that's kind of a breakdown of all the different elements that you have so that you can see, you know, if you're working kind of deeper nested items, you can get to those easier and you can rename these, you can show them or hide them. 

Um, you know, so that, you know, you can control whether or not they show in your template. You know, there's different reasons why people might want to do that. But, um, yeah, that's. At the top there, uh, you have the preview and the preview is that is going to generate the preview and you can test it using the form on the left. 

So you can add sample data in there. And, um, you know, that's one of the things that, one of the problems that I wanted to solve was other solutions. They. You know, require you to download the document a, uh, you know, it's always so clunky to try to test and see is this thing gonna actually look like what I think is going to look like? 

And so, you know, we tried to make that look or that process as simple and straightforward as possible. Can I, uh,  

Aron Korenblit: can I submit a, a one-liner for, for document such that every no coder will, will UN understand in a  

Josh Mamroud: moment what this is.  

Aron Korenblit: This is web flow for document. Yup. That is like, you've got, you've got your CSS here on the left. 

Right? You've got your little, add your little items. You've got your HTML. Right here, right? Like what sections and then subsections. And then you've got your data here, which is kind of the CMS collection in the backend, which has already kind of this like relational property to it. So I hear by say the document is the web flow is the doc is the web flow of, uh, of, of documents. 

Josh Mamroud: Oh, yeah, there is. It's very accurate. Um, I'm trying to be a little bit, you know, or actually a lot simpler to use web flow gives you a ton of control. Right. And so, you know, we're not, the goal is not to give like that much you're in there editing the HTML and stuff like that. We're trying to kind of abstract absolutely make it simpler, but, um, yeah, definitely in that vein for sure. 

Okay. So how  

Aron Korenblit: do we go about, so I, I like the structure, um, And I'm seeing the questions in the chat. I want to, I want to give Josh some time to, let's just go through the example and then we'll take those questions, uh, Lisa and club in a moment. So how do we go about mapping this kind of output from our table into what feels like these template variables? 

Josh Mamroud: So the way that. Just to backup a little bit. Sure. Document actually has three different integrations with air table. We have the app that you can install at the marketplace and then also have the generation link integration. And then you have the automation script and the generation link in the automation scripts. 

They kind of work using the same mechanisms behind the, behind the scenes. Um, and the reason why we're using that is there actually, you know, there's more functionality with them. Uh, they give you more control. And so, um, to set that up, to get that bump in that we're working with here. The way that we're going to do that is one we first has to have to add the air table API key to the document account settings. 

So the way that we'll do that is I think I,  

Aron Korenblit: I did do that already. So do that. So if we go into settings subscript, uh, integrations, uh, do I, did I put it in, uh, air table?  

Josh Mamroud: Right. So I do have it in here. Cool.  

Aron Korenblit: Okay, cool. So how do we go about adding. Connecting kind of, uh, this data to my  

Josh Mamroud: base. Uh, yeah. So the way that we'll do that is, um, now what we'll do is we'll head back over to the base that we want to connect it to. 

And then we'll, we'll start it from the table that we're going to be generating the document from we'll copy the URL of that a table. Yup. Done. Perfect. And then we'll go to integrations in the data panel on the right side. Yep. Just like that. And then we'll go to air table. Yep. And then we're going to be using the generation link integration. 

So it's actually on the left-hand side. If you scroll up a little bit.  

Aron Korenblit: Yeah. Generation link. We've got it. Well, let's remove this blocks. Got it. Oh, and you generate. Oh, cool. Okay. And then do we have an attachment field name?  

Josh Mamroud: We do. And if we head back to the base. Yep. So this is where the document, the final PDF is going to get attached to. 

And so in this case we it's called documents. So we'll just, we can just copy that. Yup.  

Aron Korenblit: Cool. Okay. So let me understand this. You, we give you the URL. We tell you where we want this to end up and you return the formula, which I'm kind of imagining is like a kind of web hook, uh, such that you're able to retrieve the information from that specific record. 

Josh Mamroud: Exactly. Yep. And then we'll head back over here. Yep, exactly. And then just paste that into a it's actually going to, we'll use a button field instead make a little bit first. Uh, well, you can actually edit directly into the button field. You're totally right.  

Aron Korenblit: You're totally right. So let's create document coming on here. 

Talking to me about my book, my favorite field type create document. Open you are. Oh, okay. Right, right. Because we're opening a URL, which is this right here. Boom. Uh, what am I missing here? Oh, I forgot the, I removed the little squiggly mark here. Yelled. Boom. Let's hide the one you had already created. Yeah, sure. 

Boom. Let's make this a little nice. Like what is a good dark blue feels, right? Boom. Okay. So this now, how will it know. What field in air table is integrated with which template variable that  

Josh Mamroud: I'm using. Yeah. That's a great question. So we're actually going to. We have, like, these are just kind of like default fields that are here. 

They're not going to map up with your Airtable base yet. You got to map those up yourself. So what we'll do is once we have that connection made, we'll start, um, you know, saying, okay, this field, we want to display here, this field, we want to display here.  

Aron Korenblit: Okay. So should I run it? Is that what you're saying? 

So I should run it and then we should map or should we map first? Uh,  

Josh Mamroud: yeah, let's see, you know, what it creates first and, uh, 

Okay. So, I mean, we got, some of the fields are already mapping up and that makes sense because. It's they're kind of generic fields and that's a generic base that we have. Um, so we're looping over line items, but we're not getting the detail yet. And I'll explain, you know, why that is. Um, but yeah, so, you know, this is, so this is what it looks like. 

You know, we have some fields at the bottom there that are actually mapping up correctly. So we have subtotal tax and grand total. Those are all mapping up. And then also the same thing with the notes. But you'll see in the notes that we have some rich texts that's not being formatted properly. We'll fix that. 

And then, um, we'll add the other details, um, and get everything in that took correctly. Okay.  

Aron Korenblit: So, and this is done in the, in the template builder.  

Josh Mamroud: Try it. Yep. So cool. You know, we'll, we'll be going kind of switching back and forth from air table to document to get those fields in there. You know, like I said, we are planning on adding the ability to pull your fields in directly from air table into the template designer so that you can just kind of copy and paste them. 

Um, so, you know, that's coming soon, but, uh, for now we've got to switch back and forth. How do I go  

Aron Korenblit: about doing that?  

Josh Mamroud: Yeah. So we'll start with say the company name, for instance. Um, now the company name is actually a, um, coming from the account table, right? So we need to first with the generation, like, what we need to do is we need to. 

Tell document, this is using the Airtable API into the air table API. Only when you have linked records only gives you the record ID. So we need to kind of give document a little bit of help and say, Hey, this record ID belongs to this table. And the way that we do that is using these table ID fields. You can see here that we have a account Table ID. 

Um, so the way that the naming of this is important. So the way that we name them is the name of the linked record. Right. So in this case it's account. So that has to be copied exactly. And then a space and then Table underscore ID. And then it's the idea of that table. And so what we'll need to do is I don't think this is the right ID, so we'll just need to go into the accounts Table, grab the table ID out of the URL right there. 

Aron Korenblit: Perfect. Yeah. So for folks kind of your air table is always structured in the same way. It's always, uh, uh, you know, app and then table view optionally. And then if you have a record expanded, it has the record ID. So that structure is always the same. So in this case, we're saying, okay, if it's a linked record from table let's copy paste, go over to order. 

And then you two options. You're creating a formula field, which is a good idea, which we'll just, you know, have that value for everything. But you can also just paste it in if you have a single line text. Right? So this is telling document that to get the account name, this is coming from this table ID and that's a field that needs to be, uh, in. 

Like the, uh, the table where you're generating the document from. Is that right? That's exactly right.  

Josh Mamroud: Okay.  

Aron Korenblit: So if I rerun it, we should now have the account name. Here in the top.  

Josh Mamroud: Right? So we actually are going to have to change that from company because the name of the field is actually account. So where we have company.zero.name, we'll actually just switch that the zero.name is going to stay the same because, um, the syntax that we're using here is first is going to be from the table that we're starting with is going to be the name of the field. 

Right. And that's going to be the account field. And because it's a linked record. Airtable sends that over as a list because linked record fields, you can have one link record up to whatever the limit is. But, um, so by putting the zero here, what we're telling document is there's only gonna be one link field. 

Uh, there's only going to be one link to record, grab that linked record. Zero represents the first item in that list because zero based. And then once we were, once we have that first item, now we're within the context of that. That account record. And so now we're telling it okay. In the accounts Table, what's the name of the field. 

Aron Korenblit: Yeah. So if we want it to say, uh, you know, account address, we would just change the ending here to be addressed. Right. Which we have here. And so that's right here. Right? So we're saying company.zero dot address. Uh, so this is a little bit of low code. This is a, it's got a little bit of code in it. I like it. 

I like, I like to do.  

Josh Mamroud: Um, we're uh, trying to, you know, like I said, we're trying to get it closer to, you know, pages on her in that regard where, you know, you can just kind of drag fields in and don't have to learn the syntax and all that. But, um, we're not quite there yet. Absolutely. Okay, cool.  

Aron Korenblit: So now, if, if, if, let me try it, let me try this, right. 

So if you're saying, I want the address here. Right now@company.zero dot address. It's not the linked record, so I want this right. So it should be a counts account.zero dot X. It should it, should it be accounts? Cause this table, his name is account.  

Josh Mamroud: Right. And so what you'll actually, what we're referencing is not the name of the table. 

What we're referencing is the name of the field. Got  

Aron Korenblit: it. Got it. Got it. So same thing here. It should be account.zero dot address.  

Josh Mamroud: That's it? Yep. Okay. Exactly.  

Aron Korenblit: So let's give this another try. I feel like we've, we've progressed enough to give it a little, little create document. Oh, it already turned in there. 

So yeah, let's create another one. 

Okay. Cool. So acne corporation, we've got the right address. Uh, This is like a logo. That's our logo. Right. So, so far. And then we, we have to, and I like the fact that it creates a second one. It doesn't override the other one. And you  

Josh Mamroud: do have the option to override it. Like there's certain configuration options that you can set when you're generating that formula. 

Um, one of them is to overwrite the attachment. Another one is say, Only open it as a preview and not attach it back, things like that.  

Aron Korenblit: Um, so I do want to address a question from Lisa and I, and I, I am seeing other questions that I'll get to later. Um, the question is, is it possible to output in something else than PDF  

Josh Mamroud: currently? 

PDF's the only output type. We're working on supporting other appetites. Uh, that'll come with the next version of the template designer. Um, just a lot of, kind of challenges around that because we didn't go with a traditional, um, word processor, like editor that you'll see in like a pan, uh, not a Panadol, a, a docu pilot or a Formstack, uh, documents. 

They use those. Um, word processor, editors, and those are a lot easier to get into say a word type, uh, format. Whereas this is not because of the style of the designer.  

Aron Korenblit: Got it. Okay. So PDF is the option today and Lisa, you can reach out to Josh for, uh, your specific, uh, output requests. So, um, cool. Okay. So kind of coming back here, we've got the, oh, sorry. 

This, this looks good.  

Now talk to me about. Kind of line items here, which feels like the next step here.  

Josh Mamroud: Yeah. So, um, It's like a catalyst line items is a link table. And so we can see that that document is recognizing that there's, Hey, there's like five items linked to this one, uh, this one order, but it just doesn't have the details of those items. 

And so what we need to do is similar to the way that we set up accounts is we need to set up a line item, table ID, just switch over to that line items. Exactly. You have to get the right table ID in there. And then that will allow document to populate or kind of hydrate or expand those records.  

Aron Korenblit: There we go. 

It's our variable. Damn. So what I did there is I went over to line items. I took a table ID. I've given it its own field. Right. And if I go back to documents, this name is pulling from that linked directly. So how does it know that I want the name? Oh, okay. Okay. I got it. No way, actually, I don't, I don't talk me through how it knows that it should put the linked records here. 

Josh Mamroud: Yeah. Uh, great question. So, um, what we're doing is we're going to, we're repeating this section for each linked record and the way that we're telling you to repeat that section is if you actually move the cursor down a little bit, you'll hover over the, uh, we'll actually just, okay. And then one more time. 

Up from that, like right there. Yep. Exactly. Now you can see on the left side where it says edit logic, you'll see, we're repeating for each item in line items and something that's important to note when mapping your fields from air table. You'll, might've noticed that we didn't capitalize account. Um, everything here is lowercase. 

So all of your field names from air table need to be lowercase in any spaces replaced with underscores and these special characters removed and. Kind of easily do that is, um, if you copy the, the name of a field from air table, you can copy it as it is near table, and then paste it into that new variable tool that's in, uh, in the right panel. 

Right. If you click new a new variable. Yep. And then you just paste it in there, it'll convert it to a document, a safe variable.  

Aron Korenblit: Yep. Got it. Okay. So if I was to redo this, what I would create as a section, and then I would copy paste. Uh, you know, right here, variable. And then when I would create the section, I would repeat in logic. 

Right? Repeat for each item. I would add the line items here, and this would repeat this whole section for as many times as I have linked records in line. That's  

Josh Mamroud: exactly right. And then once, once you're looping a section, everything within the section is now within the context of that item that is being looped over. 

So now we don't have to do like line items.name or anything like that. We can just say name because it's referencing the name of that current line item at a time.  

Aron Korenblit: Got it. Got it. So, uh, now that we have, okay, right. So I want the name of the record, which will be mad. Detonator smokescreen bomb glue V one, right. 

And then here, sorry. Number, price, number, quantity. Number amount are variables that I would have copy pasted from line items, right? These ones right here, quantity. And you would have turned them into the right kind of format. You would have added that number, quantity, the number, price, that number of. 

Josh Mamroud: Exactly. Yep. So when it comes over from air table, that data is, you know, sometimes. 10 decimal places on it, and it's just not formatted the way that you want it to. And so that number, uh, that you seeing in those other fields, what that does is that allows you to format that in whatever way that you want. 

And you can form it as a currency. You can form it as just a regular integer. You can put commas in there, you can. If let's say you're located, you can switch up the locale so that, you know, uh, the thousands places separated by period and the, you know, decimals is separated with a comma, some countries do that. 

You have a lot of flexibility over the way that you want to format that. And so there's number formatters and there's date formatters. Um, and you've got a ton of flexibility when it comes to how you want to display that information. Got it. Okay.  

Aron Korenblit: So now that we've correctly, Written the table ID. This should then output for each linked record, you know, a line item with the name, the price, the quantity, the amount. 

So I'm confident that this should now work. Right. Do we want to try another one? Maybe I want to try this one. Yeah, sure. Okay. Well, I like that. You're confident. Uh, appreciate that. Um, Oh, okay, cool. Okay. So we got this, we've got this, we've got the two line items. So essentially taking these line items from right here, who would have thought that taking like this and turn it into, this would be like a business. 

I don't know. It's a wild thing. Um, okay. Um, but when we created, so we have, we have like kind of a few more things to do here. One is like, how do we get this rich text to.  

Josh Mamroud: so, so when, uh, air table, and this is just unique for air table, uh, their rich text fields are as you know, marked down. And so we just need to parse that mark down and there's a helper in document that allows us to do that. 

And so if we switch back to our template, we can go and yeah. Yeah. And so in that notes field, um, what we'll do is we'll just prefix that with, um, within the double curly brackets, uh, we'll prefix it with a dollar sign and then MD, which is short for markdown and then a space just like that. Yep. So that's telling document, Hey, the information that's in the data, that's in this variable, it's coming over, it's going to be marked down format. 

It is.  

Aron Korenblit: Okay. Yeah. So this is clearly I got to love it. It's like a, it's like a F built by a developer for a no-code low-code audience. Right. It's not like I really like it. Um,  

Josh Mamroud: so go ahead. Go ahead. I was just going to say, yeah, the, uh, the goal was to be no code. Um, that's, you know, but it would have taken a lot more development time to get there before we brought it to market. 

So, um, figured, you know, we'll release it as this and, you know, kind of work our way into it as too far using it. And we're getting feedback and. So there's a  

Aron Korenblit: question. I think that's, uh, which is what I'm understanding from this question is can you use rich text Ian, like static ver like if I was to write notes, can I add rich text here? 

Um, so if I had like a generic text field, right? Like the name here, could I use rich? It seems like.  

Josh Mamroud: There are some resets options yet, and we're going to be adding even more. Um, so yeah, you have like the basic ones, but, um, yeah, we'll be, uh, we'll be adding more soon and then you have the formatting that you can of course apply to the entire element itself on the left hand side when you select it. 

Aron Korenblit: And I know you're focused on things you haven't done, but Lisa, uh, you know, is saying, you know, they're, they're, they're paying. They like what they see so far. So I appreciate that people are, people are enthused, people needed Webflow for documents. Didn't even know it. Um, cool. So now we should also have that rich text. 

So let's do one more. Let's do that first one. Cause we know we have some rich texts here, so let's create that document. 

Oh, somewhat RTL meant right. To left languages so quickly before we continue right. To left languages. Not supported yet. Okay, cool. Sorry about that. I saw artsy and I was like, rich texts done. Don't need to read that last letter. Okay. But now we do have this rich rich text here, which is kind of cool. I actually think this is super neat. 

Um, and I think with that, we've kind of created our document. So I think, I think for the first time in 2022, we get, we got the confetti we've, we've created a pretty neat workflow here to folks drop some confetti in the chat. 

Josh Mamroud: All right. Look at that. Oh yeah.  

Aron Korenblit: So, um, so I think that is how, you know, we can easily create this, uh, document.  

I guess from here, Josh, what are some of the things you want to kind of, uh, make sure either folks know, or like kind of tips and tricks on creating these other ways of integrating, uh, where, where can folks go from here? 

Josh Mamroud: Yeah. So, um, Like I mentioned there, this is the generation link, uh, integration. Um, I saw earlier in the, uh, before, um, kind of switching gears a little bit, uh, just to back up a little bit.  

Sure. I saw one of the questions was can you add images and yes, you can, uh, you can add dynamic images. So this is, would be a static image. 

And then you can also add dynamic images, um, just using the, the, the variable of the. I mean, we can do it if you want. Let's  

Aron Korenblit: do it. I mean, those do it.  

Josh Mamroud: So, uh,  

Aron Korenblit: maybe the image of the line item, would that be possible or is that too complicated? Uh,  

Josh Mamroud: yeah, we could do that. Um, so I would, I would say, add another field to this table that looks up the image from that project  

Aron Korenblit: product. 

Right? Right. So we want image, it's going to be a lookup. Yup. We're going to pull that from products. Go boom. Now we have it.  

Josh Mamroud: Okay. Now we have it. And so what we can do is, um, let's edit say, since we're already looping over each field in the, uh, each link, uh, record each line item, let's add it to this. So let's drag in a, a new column. 

So if you click add in the top left,  

Aron Korenblit: add in the top  

Josh Mamroud: left and then grab a column from the bottom, the layout element and just drag it next to. Try to get it right up there. Perfect. Yep. And it's going to throw up the spacing and stuff, but we're just trying to get the image in here. Right. So, uh, and then we'll go to ad again and in the column, we'll add the image itself. 

Aron Korenblit: So that's the image right here and then add exactly.  

Josh Mamroud: And now, so what we're going to do is, uh, you can upload images from your computer, right? And that would be a static image, or you can reference a link to an image online, and that would work as well. But in this case, what we're going to do is we're going to actually add a variable as the path for the image and the path for this is going to be. 

Let me just give you kind of the context of where we're at right now, when document is looking at this. So currently we're within the line item, that's being looped over. And so we're going to reference the line item field that we want to get images from. And just like, um, just like linked records, attachments and lookup fields are always going to be, um, are, and that's very close. 

All we've got to do. That's  

Aron Korenblit: right. Yeah, exactly. Okay. Let me try to explain this. I feel like I've a noobs grasp of this. So in air table, when you get an image in the, like when you try to move an image, you could have five images. So you're saying, take the field image, go to the first position. And for each image, there's like its size it's, you know, thumbnail. 

And what we want is the URL of that image. So we're saying in the path where we want is the URL of the first image, is that.  

Josh Mamroud: That's exactly right. Image is the name of your field. Zero is the first image in that list of images. And then URL is the, um, that where the URL to that image lives. And then the next step here would just be to click, add image and then double click on that. 

And that will add it to the. Yep. Perfect. So the only thing that I'm unsure about right now, when we run, this is going to be, um, because it's a lookup field and look up fields are also lists, so it might be a list of a list, you know, it'd be arrested. All right. So we'll just give it a shot and see what happens. 

Let's give it a  

Aron Korenblit: try what we're here for. Uh, so we should have right here. 

Boom. There it is. She never, you should never doubt  

Josh Mamroud: yourself. I was so confident earlier. Right. And then, you know  

Aron Korenblit: exactly, exactly. I think, you know, it's the start of the year at this. This is another confetti. I think that's just boom. 

I think this is, uh, that was pretty cool. Um, So there, we have a few minutes here. I do want to just some more questions.  

There's some folks who have questions around, you know, uh, um, you know, could we use Zapier or Integromat, so we're probably not going to do that in this stream, but, um, can you maybe just speak to you the Zapier integration and how is it different creating a document from air table from another tool Excel via Z Zapier? 

Josh Mamroud: Yeah, absolutely. There are, um, document has a Zapier integration and document has an Integromat integration recently released. And so, um, what I would say though, you know, it's, it's dot the generation link integration and the automation script. They both do a lot of kind of heavy lifting behind the scenes because when you start getting into linked records, right, you have to manage. 

Populate those linked records. If you're going to use an Excel, uh, a Zapier or an Integromat. And so you have to do that, work yourself. Um, and then you have to map the fields to your template. So what I would recommend is, you know, trying to, uh, leverage the automation script or the, uh, generation Lincoln integration, um, with document, uh, with, with an air to. 

And then once the record is updated, then picking up where you left off, like taking that new document and then doing whatever you want to do with it. If you can't do it within the, uh, air table automation, if you're not using air table, then, um, yeah, whatever data source you're pulling information from, then it just works like anything else. 

And that's still the best option. Um, And yeah, Integromat and a Zapier. So if you're connecting to say Google sheets or any other data source, you know, I would recommend using Zapier or Integromat whichever one you're more comfortable with.  

Aron Korenblit: So, you know, you'd be shocked, but not everybody's an Airtable user. 

Uh, I know there's some love for a click up a tiny bit of love, maybe for XL in the. In the audience of a T T. So I'm glad that no matter what tool you use, but you're at least able to do it, uh, it sounds like there's deeper integrations with air table, but I imagine that like depends really on who comes in, who gives feedback. 

Um, so I do want to quickly, uh, there's a few more questions in the chat, but maybe we quickly talk about, you know, the, the automation route, right? So let's say instead of. I wanted to just do like a little checkbox, uh, or whatever it is just like when I'm, when the deal is closed, send the contract. Right. 

How do I go about automating that? You know, let's say an air table, but I would use Zapier otherwise.  

Josh Mamroud: Yeah. So we've tried to make this, um, just as simple as the generation link integration. Um, and so the way that you do that is again, we will just copy the air table. From that a table of this table. Yeah. 

Of that table. Yep. Boom. Yep. Or a, I'm sorry, not the Table idea that the entire air table URL, because it's what it's going to do is it's going to extract the base ID and yep. So then we'll hit integrations and then air table, and then this, uh, automation script tab. Perfect. And so now we'll paste that in and then we'll give it the, you know, if we want it to add the. 

Yeah, add it to the  

Aron Korenblit: documents, field documents. Okay. Okay.  

Josh Mamroud: And yeah. So now it's going to create this script for us. And if you could click on that options, um, you have a couple more options here. If you want. This is where you can overwrite the existing attachment. If you only want it to be one, um, you can, uh, expand linked records. 

So, uh, let's say, you know, you wanted to expand deeper than one record, one level deep, right? By default that's the, uh, you know, document will expand any records. That it has a table ID for any linked records that it has a table I before on the primary record. But then let's say you want to expand records that are in an already linked record, right? 

So we're already one relationship deep and you want to expand linked records to that. You can just tell document, Hey, expend records two levels deep, and it goes up to five. So, uh, Met anybody yet? Who's gotten up to five, but it can go up to five, but in true  

Aron Korenblit: developer fashion, you've you forecast you, you you've you've said five is the limit, right? 

So, uh, you've gone beyond what people want. That's fine.  

Josh Mamroud: Yeah, I have to find it, you know, it just starts getting huge. Right. And, uh, the file size. So, yeah. And then watch, ignore, um, that just is to help prevent, um, duplicate data, uh, duplicate document generation. If you only want to watch specific documents for changes or fields for changes, then you can set it up using that  

Aron Korenblit: this outputs, a simple script. 

And if you don't understand the script, you know, check out, learn air table scripting or code meets no code to good places to learn how to write Airtable. Um, and this is what I'm going to go ahead and copy into my automation as a step. That's  

Josh Mamroud: exactly where I am. So let's  

Aron Korenblit: go to that automation. I'm going to create a little create document, little checkbox, eight document. 

Uh, we've got, uh, Connor in the chat, Mr. Uh, oh, Mr. Document center, I guess. Uh, okay. So this is what we want to trigger the creation of the document using document. 

Josh Mamroud: Um, and so, yeah, we'll create an automation.  

Aron Korenblit: So, uh, when record matches condition in my orders, where. Automation is checked. Do I have one? Let me make sure I have one. Let's do this one. Nice. Perfect. And then here, talk to  

Josh Mamroud: me. Yep. So we're just going to create a run script. Just like that. And the only configuration after pasting that in here that we have to do is we have to add a input variable. 

So this is just telling the script, which record is triggered, excuse me, which record triggered the automation. And so that's what the record is going to generate. The document is going to generate the document for, so just like that. Perfect.  

Aron Korenblit: Okay. Got it. So I'm naming this record ID like this, and then. 

I'm going to pull the record ID, which is record ID rate. Okay. Boom. And that's pretty much it. Right. So it's going to go in, it's going to go ahead and trigger that same, uh, kind of web hook,  

Josh Mamroud: right. And one thing I see that you have previous at the true. So this probably shouldn't be an option for the automation script, but preview, it's not going to, um, it's not going to attach it back. 

So if you just want to delete that entire line. Oh, that's  

Aron Korenblit: my fault. Cause here I did. I should've done none  

Josh Mamroud: here. Yeah. And it shouldn't be an option for that one anyway. Okay, cool.  

Aron Korenblit: Boom. So I'm not going to test this actually. Do we want to know let's I think we're where are you confident? You're pretty confident. 

You're much more confident. So, uh, create document. There we go. Let's mint this document,  

Josh Mamroud: turn it on. Yep. Yep.  

Aron Korenblit: Okay. And let's uncheck let's recheck. 

Hmm, Hm. Maybe.  

Josh Mamroud: Wow.  

Aron Korenblit: You never, I, you never lost confidence. Josh. I re I respect, respect that. Um, and then we have our PDF. Uh, so confetti, right? Confetti. Let's do one more last one of the show. 

Josh Mamroud: all right.  

Aron Korenblit: So a question for you for personally, if this is multi page, you're going to generate multi page, is that.  

Josh Mamroud: Yeah. Uh, you could probably force it by just adding a bunch more products. I don't  

Aron Korenblit: want to, I want to make sure that you can do  

Josh Mamroud: it. Yeah. So it'll grow or shrink as many pages as it needs to do as it needs to, to fit all the content. 

That's, what's nice about it. Like, you know, that's something that kind of people don't realize as soon as they get into the designer is like, okay, how do I create new pages? It's like, well, it'll actually do it for you. That's the way that it's set up is to be smart enough to know when it will go, but you could force page breaks if you want. 

But, um, right.  

Aron Korenblit: Um, okay. There's some questions I want to get to, uh, one from Daniel, which is, you know, could I use custom fonts and kind of set images to fill and cover?  

Josh Mamroud: Uh, no one, yes. Custom fonts are only available yet. Uh, it is on a roadmap. And, um, so we set, we added in an image directly, like we added an image element, but what you can also do is you can take an element and you can set the background image. 

And I think that's what he's referring to is it will suspend, it'll like fill up the entire, uh, the entire element and. There's also fit. There's a hundred percent you can choose from different, a couple different sizes. So you, you  

Aron Korenblit: know how I know that your web flow for documents is because people are already like, does this, can, can you do gradient, can you do the custom fonts? 

Can I animate my PDF? Right. So you're about to get the laundry list of designer requests. Uh, people are about to build some like really, really fancy, uh, um, you know, uh, um, Documents and I'm excited about it. I'm excited to see some crazy ass documents that people are going to build on and document  

Josh Mamroud: me too, you know, it's like spend a lot of time, um, kind of putting all that functionality in there. 

I'd love to see, you know, people kind of pushing it to its limits and hearing where, you know, it's, you know, where, where we can continue to build out and add features. And, uh, if they want to share things that they liked, that'd be awesome too.  

Aron Korenblit: So speaking of which speaking of niche, or potentially important a feature request question from Lisa, which is, you know, what would be the best place to give you, you know, or ask or give you feedback or feature requests and all that good stuff. 

Josh Mamroud: Yeah. The, uh, we have a slack channel, a slack community, um, and you can find it at the bottom of our, uh, of our website. And also when you sign up for an account, it'll be included in the email that you receive. And then, um, there's also. The chat, um, you know, kind of widget on the site, that's going to go to me or a map Warren, um, you know, and, uh, so you'll get one of us and, uh, that's another great way when you're just in the app using it to communicate with us. 

So it's. And email is always good too. So your,  

Aron Korenblit: your it's basically a hard to, to not reach you. Those are  

Josh Mamroud: available. Yeah.  

Aron Korenblit: Um, cool. So I think, uh, you know, as, as, maybe as a, as a, as a closing here, I'd love to just hear from you, like, what's next? Are you going to add signing Stripe or are you still focused on adding functionality? 

Uh, within, you know, the thousand feature requests that people have. What is your kind of short term and maybe more long-term vision for.  

Josh Mamroud: Yeah. So, uh, short term, it's the things that are on the immediate horizon are, uh, getting it to kind of have more of that pages on a field where you can just like you have your, your variables and your, your fields, I guess, uh, in air table terms, um, and be able to drop those in and add that a lot more easily. 

Um, and then after that, it's. Uh, more integrations. So we're going to be adding, uh, additional data sources one, and then also delivery methods. So, you know, kind of eliminating the need as much as we can for a Zapier or for a Integromat and allow you to want to documents created, you know, even, you know, adding triggers that from whatever data sources connected to. 

That, you know, that will fire off that workflow. It'll create the document and then you want to send it to in an email, you want to attach it in Google drive, and then you also want to attach it back to the data source original record. So like those types of things. So that's what we're working on. Um, and then, uh, yeah, there's, I mean, a lot of stuff further on down the road from that, um, big stuff, you know, hopefully we can. 

Get to a point where we can embed the designer and the, the document experience within air table, like upgrade the air table app so that you don't have to leave air table to do that. Um, that'd be a big thing. Um, but yeah, there's, there's a lot of stuff. There's a lot of stuff that we got.  

Aron Korenblit: Yeah. So, uh, it seems like you already have some, uh, some folks who are itching to use it. 

So Daniel data lyrics, and I'm sure others are kind of a prime to use it to go to. About me go sign up, uh, reach out to Josh. If you have any questions, Josh, it was my pleasure. Uh, really appreciate you coming on. Apologies to everyone for those 10 minutes of darkness where I thought I was live, but we weren't. 

Uh, so, so yeah, Daniel, huge. Thanks. And Daniel, what am I saying, Josh? Uh, sorry. It's been, uh, uh, red Daniel in the chat and it got me lost.  

So, uh, Josh huge thanks to you for coming. And, uh, I'm excited to use that.  

Josh Mamroud: Uh, thank you for having me. And this has been a ton of fun and, um, you know, especially engaging with your audience and just have me on a really can't thank you enough. 

And, uh, looking forward to, you know, all the feature requests and, and getting, you know, hearing from the, uh, the people watching now, this is going to be great.  

Aron Korenblit: Yeah. I regret those words, but, uh, do you, do you use it really appreciate you coming on and I'll see you next week where we're doing, uh, OAuth for, uh, Uh, with Martin from the code meets no-code community, who's going to come teach us OAuth. 

So hope to see you then. Bye everyone. Thanks again, Josh for coming and I will see you all next week. Bye. All.

Key takeaways

Similar streams