Archive.fm

North Meets South Web Podcast

JSON vs Polymorphism and editable index pages

In this episode, Jake and Michael discuss whether you should push polymorphism to the database or settle for a simple JSON field, and we discuss options for rendering multiple edit fields on an index page.

Show links

Duration:
39m
Broadcast on:
27 Jun 2024
Audio Format:
mp3

In this episode, Jake and Michael discuss whether you should push polymorphism to the database or settle for a simple JSON field, and we discuss options for rendering multiple edit fields on an index page.

Show links

Hey, I'm Michael Derenda and I'm Jake Bennett and welcome to episode 157 of the North meat South where Pucka Good deal. Hey Internet cut go went out with garbage Are you there? Here's a mine. There you are hello to cut out for a second. I don't know somebody's It's back now All right, it's crazy to me that this works at all. Honestly The whole you know 14 and a half hour thing. It's wild to me. It is absolutely wild to me In real time with video never thought it'd be my reality and like only just a little bit only just a little bit of latency I Mean hardly hardly any it's pretty darn close. I mean you know Pretty good pretty good. It is pretty so hey pretty pretty we've we've been chatting a little bit about some of the issues You've been dealing with that work not issues just challenges unique challenges So that we could chat about that a little bit today. Yeah, I was thinking about yeah, I Was thinking about how we could talk about that in in some kind of kind of exactly what I want to talk about But in in the abstract so that it's not just specific to what I do in my day job So I'll show you how I do this and if it makes sense. Okay, I have one I have one other similar challenge like not not similar challenge, but just a UI sort of question And so I can throw that off you at the end of this one too, and we can chat about that a little bit. Yep. Yeah. Okay, you go first so we have this notion of Let's call it a referral program. I guess cuz that's effectively what it's a referral program. Okay and the affiliate of the referral program Has an agreement you so you me as like the the intermediary allows you as the Downstream user now as the downstream user. Okay, and let's say David hand pill as the affiliate So you two have an agreement through me as the intermediary Now David hand pill in setting up this agreement can set on his on his referral account Some fees what he will pay you Based on the referrals that you send to him that are successfully closed Now these referrals we set a default so every person every affiliate that signs up and creates an agreement Will have these fees Attached to their agreement. It's not a one to many We're not taking like that value and linking it to the agreement as a record. This is a snapshot in time So today David Hey, I can I interrupt just clarify a couple things real quick. Okay, so let's name your businesses widget company All right So your widget company sells widgets and David hand pill is signing up as a person who is going to be selling your services Essentially, right? Yes, so he is a person who is who has got a partnership with you But now he is going to set up an affiliate program on his side to let me Sell services that he provides Is that the idea but there it's actually you maybe it's like a white label service We could think of it like that something like that. Okay. Yeah, because that helps me make a little bit of sense So your widget company a David is signing up as a person who's going to sell products of widget company a and now I as a person who have signed up like under David and now an affiliate and David on his side can set up a Referral program and there's fees associated with these different Referral programs that he's set up. Is that right? Yep. Yep, that's right. Okay. Okay So he could have multiple different types of referrals program set up so he could set one up for me He could set one up for his family where they get more, you know If he wanted to for instance or yeah, he could set up one. That's just a hey We you know if somebody advertises on their podcast and we get a referral from them Then you get 5% or something like that, right? So he can have multiple different things set up. Okay. Okay. I'm on the same page so this so this Referrer David sets his first there are two two different ways that we can pay that we can pay fees It's either a fixed amount between a range of things so from like If you sell something between zero and a thousand dollars, I will pay you a hundred dollar referral If it's between a thousand and five thousand, it's two hundred dollars if it's five thousand whatever like so they're breaking the changes So it's stepped. Yeah, a step. Yep. Yep. Yep. Yep And then at the end it could be like fifty thousand two whatever will pay you like and then we cap it at five hundred So and okay, okay, so we don't handle the payments or we're storing is these things So that you know based on what you refer to David. This is the payment that you'll be Receiving or a successful transaction makes then we also do percentage based so it's a percentage of the total amount Up to make some limit. You know, so we could say up to fifty thousand dollars So you send a thousand dollars will pay you know two percent of fifty thousand of that hundred thousand dollars So these are the things we have now as I said, we David would configure this in our platform Okay, yes specifying the ranges, whatever that these then become the defaults for anyone who signs up to his affiliate program And what do you call these these bracketed or percentage ranges? What's the name for them? Is it fees? Is that what you're calling it? Yeah, so we've basically got and I think it's flat fee and percentage Okay, and he then attaches a flat fee or a percentage fee to a specific referral program that he's set up Yeah, so you have one program. This is like you this is what it always is This is the default for anyone that joins now on a okay her Agreement basis. Okay, he could alter that. So for a friend. He might increase it slowly for Decrees, yeah, okay, so the referral agreement is what the fee is attached to sort of yeah, so so in that situation And we would void what it like if they sign up the agreement and it changes will void the original agreement create a new agreement to be signed and executed with Those those values set on that agreement. Okay, so We don't have to do any calculations We don't have we're not responsible for the payments or tracking, you know We just say like this is your will obviously numbers payments have happened These are the numbers this goes into a PDF that is sent to you that you sign that you send back And then that's the agreement in in place So where my I guess complexity comes in Is for a referral fee that is attached to my referral account? How am I storing this now? I've got a few different ways that that it can be done We don't need to search on any of this stuff. So my first thought was let's just have two fields on the referral fees table So we have obviously the the referral account the referral account. We then have a Fixed or a flat fee and a percentage right and this these are just Jason arrays They're arrays of objects of you know the bracketed ranges, whatever and So this was my first thing when you say referral or when you say referral account Is that an agreement or a referral agreement that you're saying so David has the word Account use the word agreement a couple times. I'm trying to understand what the agreement Account which says that he's a referrer and then the people that he has Affiliations with will have me a referral agreement you so you will have a referral agreement and Chris can be we'll have on TJ to Miller. We'll have yes, okay So David owns the account and then he signs an agreement with me the person who's going to be sending him business Okay, and on that agreement is where you store the fees We're on the account. Yeah, so the account has the default both, right? Okay, the account has the default values when the agreement is created We take the values that are default and we I see okay, and then we so we copy them across basically that makes up on the agreement There is all on the agreement with I have another table. That's like agreement fees and we copy from yes Agreement to do from the fees tables from the defaults to the agreement fees table and that makes it together Yes, that makes sense. Okay, so and then that just gets generated into a PDF one time You get saved it gets attached to the account and that's it. We don't calculate it We don't have to do anything with it. It can be displayed in the account This is your like active agreement kind of thing. Okay, but it doesn't change unless so once it's yep, I gotcha So my my hold up here is how do I store this? And You know put it in the database there. There's there's two ways that I've thought about it the first one is Just Jason feels two Jason fields on there that we just copy around and then we pass those Collection basically it's an array of objects. So we have a yeah I started this out as just like a plain old PHP object is the renoting class that had you know three values on it I ended up rolling all that back and just using larval data because it handles all the stuff that I had to write for myself Okay, so essentially we have a data collection of flat fee in one field in the flat fee field And we have a and then we just have like a flat object for the percentage because the percentage is just but I It's much easier. Yeah, there's no brackets to it. It's just you'd have the percentage and you have the cap. Yep Yeah, so This was my first thought My second thought was okay We we followed the atom well then the school of thinking we push polymorphism to the database and we just have like a record That says you know, this is the thing and then there's another table that has the ranges You know minimum maximum value minimum maximum value and then and then a second table Which has all the percentage stuff and then we just referenced that those corresponding records in that table? And so we've got the poly so that when we hydrate The eloquent record for the agreement. Yeah. Yeah, and then we go up. We need to go and create this data object over here So it's it's basically how do we persist it and what are we comfortable with doing? Mm-hmm. So You said that you're never actually gonna need to do any calculations with these it's just for display purposes not calculating Not searching. It's just like we would go. Well, then I feel like that makes a lot of the record. Yeah. Yeah That makes it a lot easier because you know, there's not as much you don't have to like be able to Pull it into some object object that can do a bunch of calculations and things like that if you throw a number at it So if it's just for display purposes as long as you will be able to Keep them the same Like as far as like what the object would look like over time then you should be fine Because if you ended up updating it, so like let's say like, okay, well now there's a we need to add a new one That's like well. This is the minimum amount will pay out even for bracketed ones Like we'll pay a minimum of a hundred dollars even if you send up a referral That's only 500 bucks like minimum of 100 maximum of 500 Well now you have this new minimum one to deal with and you didn't prefer So but I guess in that case you could just sort of have your your view logic say well If there's a minimum display it if there's not don't worry about it sort of deal So you could just use conditional logic to make sure you're just playing this And I feel like that's probably gonna get you every every almost everything you need Yeah, and if you did need to change it in the future you always could you have the object there You could always eject and sort of persist them to another location So my if I was me doing it, I'd probably just store them right alongside the database records initially And then if I needed to later on change it out I would do that But I wouldn't even worry about that until I got it started and got it working and make sure that people are using it and get some More insight into how it's being used and make all those other changes that they're gonna ask for before you get into a really You know Normalize database situation where you might not need it Right because then the trick is always at that point where you've got you know the account and then you've got the fees and then the agreements and then you also got like the flat fees and the percentage These and so you've got like five or six models. Yeah, just to do all this stuff And probably a lot of duplicated data to be honest a duplicated records Like there's probably gonna be so many they're gonna be the exact same. Yeah, you know, and the thing is if you go and change your defaults When you post that form back to the server, we're not gonna try and like Modify existing stuff. We're just gonna replace it with whatever you sent and this is the new set So it's not like we need to go and send a patch to you know slash flat fees slash one slash whatever It's it's it's just gonna be take whatever was posted in the form and that is the new canonical set Yep, the fault values. Yeah, and the thing you could do to is you could put like a version number on the agreement If you wanted to like if you wanted to do something radically different you could say like okay Well from moving forward every new agreement that we make is going to be V2 and then our deck or not our decorator I guess it'd be your decorator possibly could say okay We're looking at a V2 so we know that it's gonna have these types of values and then you could just change out how you display it So you could do that too So yeah, I think that gets you 95% of what you would want I mean, I can't really imagine a scenario where that wouldn't work Yeah, cuz there's there's no like we don't see this is how it's always been it's either a Flat fee on a range or it's a percentage up to some some threshold It's it's never really changed the thing that's bit us in the past with doing things like this is If the structure of the object changes you have to be really careful about doing it a backwards compatible way so when you're trying to De-serialize that Json back into an object in in PHP if the things don't line up you can get into the situation where it's you know If you've got if you've got the state stored in the database in one way and you've added a new required field You know you have to make sure that that new required field is nullable because the stuff that's already persisted in the database Doesn't have it. Yeah, so that's one the other thing that's bit us in the past is when we tried to move Classes around so they were in one one namespace we tried to move into a new namespace Obviously everything that was previously Persisted with a reference to that specific path was now referencing Something that wasn't there and so try to yeah, I tried that object and and that will blow up so yeah, and the sparsity larval data package does have Similar to morph maps it with eloquent you can wrap yep strings to classes and nice There's some hesitation in in the team. Like do we really want to be putting more Json in the database? And or like polymorphism is more I suppose, you know with separate models and things like that a more Designs like slash structured approach. I think ultimately you end up at the same destination Mm-hmm in in that, you know, you are storing you're just treating complexity. You're just trying to complex it I'll always end up with it. Like I said, you know There's five or six models and then there's five or six tables and you've got these tables that basically just have three columns in them that are just values Yeah, I don't yeah think given that this is you know 90 display only I don't think it needs to be You know split out that way And that's why I would just make the argument to the team to be like listen, let's just get it shipped Let's get it out in production with this this simpler version of it And then if we need to make it more complex, we can there's nothing holding us back from doing that but like Yeah, let's ship the simplest version of it and then if it needs that additional Complexity if it needs that additional, you know I mean not type safety, but I kind of I guess a little bit um and you can attach some behavior But like the thing is you're serializing You're gonna cast those things to those objects, right? When you pull them back out of it, so it's like I really don't know I don't know that you gain that much other than saying like if you change it in the future You're gonna have maybe a little bit you feel better a little bit better about it because it's just sort of a loose structure right now But I don't know it seems it seems like It seems like shipping it just in the database in that same table is gonna give you what you need Yeah, I like I get the like, you know, this is bit us in the past. I don't think like what we did in the past was Kind of gnarly because we had like really big objects that we were serializing in Into the database and we only Only move things once and and moving at once was enough of a Problem for us that that's where we put the you know the the map in so that we can always change what object is hydrated based on um The the string which is which is fine, but the complication is you know versioning that thing and making sure that you're not introducing I know that stripe does you know the version of their api so they kind of like transform the thing through the different versions as you go up Yeah, um, yeah, which is you know, it is a level of complication that we probably don't need to introduce I think if we were to Just go, you know, everything that that is done. It has to be additive. You know, we can't Remove fields. We need to add fields that are nullable by default because there may be things in the database that don't support That structure, you know being mindful of that is probably better than You know tying ourselves to Like you know extra tables for yeah Yeah, there is a way there is a way. I don't remember Aaron Francis talked about it at one time where there is a way to set up something That will enforce the JSON schema Yeah Yeah, virtual calls, but there was a way to enforce JSON schema inside of the meet my sequel database So you can ensure that the schema stays the same so it basically gives you a little topic on the column Yeah, yeah, I know someone someone that submitted to speak at laracon this year and I said there's no way you were doing this But they suggested like putting sequel light databases inside of my sequel inside of my skill columns I mean, that's literally here's the crazy thing. What's old is new again? I mean we have this at work The legacy database that we're working on is called universe database and it's multi valued columns And so you have columns inside of columns. So you have like Table, you know, you have the debtor table with attribute 15 because they don't have names. They just have numbers Attribute 15 multi call multi value three. So it's like it's a three-dimensional Table it's not like a two-dimensional like we're used to so, you know, yeah It's the same it's so funny And so when I when I talk about when I talk to the old gray beards there about like, you know, no sequel stuff They're like, oh you kids are just reinventing what we've already had for years Yeah, this talk came through and I messaged it. I'm like, I can't be responsible for you putting this out into the world We're not doing that But I so like I say that because like if the if the fear is oh, they're gonna be Inconsistencies or whatever like you can get around that there is a way to enforce to make sure that the JSON schemas is Isn't enforced on that on that column Um, the other thing you could do if they're really if they're really sensitive about it or really worried about it is You could just store along with that that particular thing you could store version number and then you could have when you deserialize it Uh, you know cast it in the database. You could have it Automatically look at the version and then and then do a different casting or a different version of the dta based on that so yeah, and there's like We don't even have to put a version number in there now if it becomes problematic We can put it in there and figure out how to make that work later Like if there is no version field on this dto, then we can just say well We don't don't need to worry about it That's like version one and then everything after that then you know if we do need to change the structure then I had a version Yeah, yeah, but I think you know through the we'll do the testing You know and build out of this first version and just say like this is version one We'll figure out pretty quickly if it's problematic or not And we've done it in the past making them these like larval data objects means that we can type them Which means when they go back to the front end, which is built in react They have oh, okay. Yeah, type safety and all of the Completion stuff all the way through so you guys would we've got to generate the time to the type script object. Nice. Yeah, that's pretty cool. Actually So I don't have any understanding or comprehension or Even wants to know what the heck is going on in the front end safe to say that I just need to attach some attributes to these data objects And then then they get what they need on the front end and then I just Back into the shop. Yeah Well, cool, that makes a lot more sense to me now that you explained it that way. Yeah, I think attaching like the personas to the different You know parties in the system helps make a little more sense of it. So yeah, it was when you were talking about it the other day. It was Semi-clear. Yeah, but it makes more sense. I was actually in those one way kind of things as easily. So yeah, yeah I was actually I just hit in the middle. I just hit in the middle and hold all the database records, right? And then it's people come through me. Yeah. Yeah, exactly So I was when you were asking that question on on telegram the other day. I was taking Harrison out fishing And so he's been on a big fishing kick recently There's a pond by our house and there is a spot right by the edge of this pond where a tree overhangs the water And so it's a shaded spot And I think they're like ants and bugs like in this tree that will drop off the tree into the water there Yeah, and so there is just a bunch of fish. Yeah, a bunch of fish there And so it's not even real fishing. I mean I take him there I'm not kidding. He literally puts a hot dog on because I found out hot dogs are much easier to let a kid bait than worms Because they don't like to you know, yeah, whatever It's not like that's a worm. No, it's just a hot dog. Exactly. It's just a hot dog And so he will barely even drop the hot dog in the water and he doesn't even cast He literally puts the pull in the puts in the water the bobbers there and he literally just he doesn't real he just pulls him up And it's crazy how fast they catch him. He catches these things And so he just wants to go fishing all the time because he just catches him one right after the other But he's learned how to put the bait on now and he's learned how to take the fish off by himself Hold it, you know Put put the spikes down on the you know the fins down and you know the dorsal fin or whatever and and so he's got all that Figured out and he caught a bass the other day. He was really excited about but um The little lesson that I learned also while I was there is I've been drinking liquid death recently So I gave him soda for the year. You know what liquid death has ever heard of it No, okay. So it looks like it looks like a tall boy Like beer. It looks like a big right beer can you know those tall. Yeah, one man. Yep. Yep. Yep. Yep. And so I can or a bottle It's a can hold on. You want me to show you? Okay. Yeah, I get you. Yeah. Yeah, show show the show the viewers Hold on. I'll be back. Okay Ripping podcasting by the way So this is what it looks like Right, okay. Yeah, got you So it looks like it looks like beer as it looks like it's just water Right, um It says murder your thirst. That's like their thing and I had to name this one This one used to be called armless Palmer Instead of Arnold Palmer But Arizona tea Threatened to sue them if they didn't change the name so like screw you we're calling it dead billionaire then And so Arnold Arnold Arnold Palmer was a golfer. You know whatever dead billionaire. I thought it's funny But anyway, I took this I took this with me fishing the other day when there was people walking by whatever and Harrison was taking drinks of my water. Oh And I think people thought that he was drinking a beer Because one of the kids walked by and he's like, hey, can I move your dad's beer? And he was like, oh, that's not Harrison was like, that's not beer. He's like, it's just water He's just like oh I'm pretty sure they thought that was just letting my kid drink my seven-year-old drink of beer That's pretty funny So anyway, I'm having to be more careful about where I take this stuff. It's super good I've been drinking a lot of it recently, but uh, that was fine Anyway, yes, okay, so we can get to my thing So I don't know if I want to I don't know if I want to like blow the top off this there is a thing that zangle created a while ago And they didn't actually create it. I requested early access to it, but it's called my user dot guide And it's not like a secret. It's out there on the web. It looks really cool. It's basically team profiles For your teams, right? So just like they can you know, it's a very very simple um It has like hey, here's my here's my social profiles. Here's a little info thing about me um Here's what teams I'm a part of Here's some questions that I answered. Here's some personality profiles that go along with me If you use like the Enneagram or use widget or you use the disc or whatever so different companies use different things sometimes right And so there's been recently this this push by our People resources team to add some things like so we've done done these personality tests And they're like, you know, we've we've spent a lot of time teaching on this We'd really like for people to be able to see Uh other people on their team their their personality profile stuff. I'm like, okay Well, there's no great way to do that in teams and we don't really have like a profile thing for our people And so I was like, let's just build this. Let's just actually build it because I reached out to Um Jesse shut about this like years ago and he was again We sort of put it on the back burner. We're not really doing anything with it So that like literally is probably four years ago three or four years ago And so I'm like screw it. So I just gave it to some of my guys internally. I was like, hey make this like do this And so we're working on it, but if you go to like the if you go to I could send you the picture There is a part that has a questions library Public profile you can see the public profile. So what you'll see is like on the left hand side There's like their picture and stuff Uh in a column on the left like a one third column on the left has like their picture Uh, there's socials And then they're little they're little about me on the right hand side two thirds column on the top It has like any personality profiles that you've filled out that they've filled out for them and then underneath that you have answered questions Okay So this is the challenge How do you allow the person to edit their profile? um And the questions, right? So With the profile, it's easy. You just allow them to edit their social links Edit their location Edit there about Maybe a website if they have one. That's it for the profile part. Yeah, but like Do they edit that separate from the questions that they answer like are those two separate things? You know because the questions are not questions that you just make up about yourself They're like, you know, you could add new questions, you know, so there's probably like a Database that has here's the questions, right? And then you have a relationship between the questions and the user in an answers table Right, so question user in the middle you have answers, right? So it's the answer to that questions pivot table, basically um And so who's creating the questions are they like Is there standard questions? Okay, that we create yeah, so you create here's the 10 questions or something and people can yes Answer them so that would only display if you have an answer for those yeah, yes, that's right Okay, and if you wanted to answer more of them You you could probably answer as many as you want like up to like, you know You could either limit it and say like pick your top five or pick 10 or if you've answered all 10 then you can display all 10 um But i'm just trying to think about like the actual user flow From being on their profile page, which is what they're probably going to see when they hit their default homepage Just gonna say like here's your profile. Yeah, or might show their team dashboard or something I don't know but then in case When they want to edit their profile, they're probably going to go to their profile and they're going to click edit somewhere, right? So in my brain i'm thinking like edit profile is just Those pieces like my socials my about me my location And then questions is probably something separate like over on the bottom right hand side where they're displaying the questions You'd probably just have like answer questions or something like that. Yeah, like I depends what you call them like my profile or my questions or my answers really Right. It is my answers. Yeah, or about me You know, whatever you call that I'd probably put it as a like a separate tab or a separate page that they can get to Mm-hmm And then that really is just a form of I guess, you know All of the questions with the text area underneath that you know They put the answer in and if there is an answer then you display it And if not, it's just an empty text box and then when you save it you just You know filter out wherever the answers are and create the records or update the records Yeah, I sent you a picture here. So like you can see kind of how the profile looks and we can throw this in the show notes too Um But you can see kind of like how the answers are on the bottom right hand side of the page Yeah, so they have like answered questions So like what i'm wondering is like do I put an edit button By answered questions and say like edit your answers or something like that Edit answers and then it would show you hey, here's the ones that you've answered so far Here's the ones you haven't answered right. Maybe like answered questions and then like Questions to answer, you know, something like that like sort of separate them Um, so like if they click answer more questions, it would show like a question library or something like that for them Yeah, I certainly like Order it so that the questions that have answered are first at the top and then anything else is at the bottom Um I feel like it would be better for me like if I was the person wanting to see it I wouldn't want to have to go and answer each question individually I'd want to be able to just like on that page fill out any of them Like see any of the answers that I have just sort of in line And then just have blank text boxes for any of the ones that I don't yet I mean, is this the way we bring back like click to edit for a to on actually yeah, I mean Right. I mean you could just make this a live one. Yeah I've been in Salesforce lately and when you like double click on any field it changes the whole thing into an editable field Like the whole page the whole form becomes an editable field and then it converts all of the You know The the text The spans or whatever into text areas with the same stuff or inputs with the same stuff So you could just Yeah double click on it and that would convert the the text to a um To a text area. I think the trick will be with the questions that have not been answered yet Like do you just always display a text area for those ones? Right with a placeholder like, you know, tell us what you think about this or You know, yeah, I feel like I'd almost I feel like I could almost do something like Just show the questions and any answer that they have like if they have an answer show it in the text area Yeah, and then when they just change that On the page it just saves whatever questions they've answered and removes any that they haven't yeah I mean if it's a live I think you could just you know unblur go and update that that field And totally It may be a case right that you when you create the profile it just goes and inserts all of those answers as empty Yes, and then you filter You know, you filter only the answered questions To display like the public profile But if you know, if it's if it's the user that's logged in and going there Okay, just show it all as text areas and then when they blur Um, you know, whether it's a a form with all of the things in it or they're their own individual forms I don't know Oh, it's one half and a dozen, you know flip flip the coin as it were Um Yeah, if you if you're viewing your own page, maybe it just makes sense to make everything your text area Especially if you pre-create the answer records Yeah When you create the profile Right otherwise you otherwise you have like this murky thing where it's like, okay This top section is the questions that you have answered if you want to Edit the answer you've got to click on it and then it changes it to a text area You've got to like save it or you have an edit button or something like that Um, and then you've got all of these text areas at the bottom. So it's a disjointed user experience. Yeah, it'd feel weird. Uh-huh So, yeah, it's either everything's a text area for a logged in user so they can go into you know edit their stuff or it's just the text if it's a You know and then or the alternative is That it's all just text and then you know below the folder wherever it is You know you have five unanswered questions and you click edit and it turns the whole thing into an editable form Yeah Yep edit answers and then and then at that point it just shows them. Yeah. Yeah I think I like that. I think I want yeah, I because I want to keep it just super simple So I have my I have my brand new junior developer working on this And I think he's really needing some clarity on exactly what direction to go because I just sort of threw it at him like hey There's some designs for this just go make this yeah, and so it's crud It's very crud, you know, there's not a whole lot to it But I think he's struggling with like the structure like how do I do this ui? So right now what he's got is he's got a different page for each question to answer You know, yeah, definitely we're gonna do that. No, I don't think that's like a wizard or whatever. I think it's all on the same page I agree. I agree And like I said if you get a bit of that but you know the component the component can just be like You know on the mount it takes the question and the answer Yes, and then yeah, so you've just got like 30 of these on the page and then when you blow or whatever you just I think that will be the trick is how do you save it? If you did your components Because someone might type something in there and then like just go away from the page and it doesn't say and that yeah, you'd want to Yeah, that so you don't want to like you don't want to like save it in the middle of them typing either Like you don't want to like debounce it and then save it because they're not, you know, they're halfway through an answer in public It's all of a sudden a public profile or yeah Or they're just kind of like putting their thoughts down and they haven't saved it yet And then you know they press enter on action and it saves it or something like you'd want Probably needs to be an explicit and explicit save I think you got to figure out where you know, you're gonna have effectively 10 form forms on the page that I think what I do then I think what I would do is I would probably have on each question If they've answered it, I would show their answer and I would I would have an edit button But the edit button would just do basically change it into a text area And then you would it would become a save button something like that or you'd have a save underneath it. Yeah. Yeah, I think that's what I do Yeah, so I think it's what's an edit show them all at the same time. If they want to edit them, they can just click edit. Yeah Yeah, I think for consistency of of experience When you create the profile create all the questions or create all of the answers With nothing in them and then when they go to this page they can edit on that page And it just gives you the text area if there's text area it'll show it if there's no text there Type and then everyone gets their own little save button. So it's an explicit. Okay. I'm ready to save I finished my thought go. Yeah kind of thing. Yep. Yeah, I like that So i'm actually pretty excited about it because I think it'll we've wanted to do some of this stuff for a while where like We have people who have been here for quite a while And they'll go through different departments like they'll go from you know, the support team to You know, they'll go from like our subrogation support team to like our claims examiner team And then they'll go from there to like a production role where they'll be like in our core team And then they'll graduate to like a frontline adjuster and then they'll make it a full budget adjuster Like so it's like it would be really cool to be able to like see their progression through the company But we have nowhere to store any of that information. We have no where we're keeping track of any of that either and so HRIS I don't know resources information system. Oh, there you go. Yeah. Well, I suppose they do keep track of it They do have some of that actually um But uh We just recently got the the api working for that thing. That was a freaking nightmare Dude, I spent half a day Trying to figure out why I could not get authenticated with their api And then there was some obscure spot where like, oh, here's the api token But you have to put the word bearer in front of your api token in order for it to work Like you're kidding me. Yeah Authorization has to be bearer of space token Yeah, yeah, which I use for like if i'm doing a layer of all way, you know in layer of a land But it's like this one. It's like you're literally using their demo page where they're like, hey try out our apis And then it's like put your api key in it's like, okay, I put my api key in here They're like, well, you have to put the word bearer in front of it. It's like why you know i'm putting my api token in Yeah, why don't you check and see if I have the word bearer? That's right. Look. Is it bearer of space if not and just just yeah On the front? Exactly. So anyway, well, this has been helpful. I appreciate it Yeah, I'll keep you updated and uh, shout out to those guys at zangle if they do end up creating this I will probably be a customer. I've already requested early access a long time ago So not trying to rip you goes off promise. I just really love your design and love the idea So what was guys when i'm selling it chow to jesse and and feel like hey, we've got something started here Yeah, we built this thing. Do you have it? Should we just like Can we put this up here? Yeah, yeah, yeah, because it's not going to be public either It's really only going to be internal and like I have a um It's cool. Like i'm actually going to have internal dns of wilbur.me Slash the name of the person. So I think that'll be pretty cool So wilbur.me slash jake benidor wilbur.me slash michael dorinda or whatever, you know and so um It's you know nobody on the outside will be able to resolve it because wilbur.me doesn't i don't know We don't i certainly don't own it No so Anyway, you know if you are in the internal dns forever on then sure right which we do Yep When you're all at 10 dot 1 dot 1 dot 4 or whatever enough you go. Yeah You're set to go All right, dude. Well, why don't we wrap this one up 157 is that what this one is? Thanks everybody for hanging out with us episode 157 shown us for this can be found at north meets south dot audio slash 157 Hit us up on twitter at jake benidor at michael dorinda or at north south audio and as always rate us up in your project catch our choice Five stars will be amazing. So next time my friends. We'll see you later. Bye. Bye