Appgyver suitable for my complexe two-sided platform?

Hi folks,

Disclaimer: I come from Wappler where I’ve build a first two-sided platform, knowing zero coding. But I did end up learning a few basics about PHP, CSS and JS (JASON files…).

Now considering building an app (native,desktop and PWA) for a B2C platform letting:

1. Providers register their services (ex: service A, B and C), each with pics, video, text, pricing, description,… (they’d manage their listings thru a Dashboard - and we, Admin, do the supervision, monitoring, authorization, approval…).
2. Individuals search services with sophisticated multi-select filtering (by price and/or location and/or theme…), make the purchase for a “bundle” (composed of all service options that meet the search criteria) at set price and attribute this purchase to a beneficiary’s email address with a custom message (ex: criteria “1000$ in NYC” shows 20 matching services - so I pay 1000$ for this bundle of services - one and only one of these services will be used).

Beneficiary would select one service out of the bundle and “redeem” it with the selected Service provider via QR code and/or some unique UUID.

Would need Stripe or similar payment solution already fully or fairly well integrated for easy setup. Payment flow is not straight forward: individual pays platform now for the bundle. Money sits with us, until beneficiary manually redeems at a later stage when scanning the QR or barcode, then only does the platform sends the money to relevant service provider - minus a commission :wink:

App to display registered services in bootstrap style cards to scroll/flip through like in Airbnb or tinder.

I’ve used wappler for another platform which did the job 100% with full (unlimited) customization but I found their documentation quite poor and out-dated, making the building longer than expected for low/no code since one has to always post a question and wait for an answer. Plus, it’s low code, not really no code. And their full customization involves tons of setup to make some components work as intended.

Having heard good things about Appguver, I’m wondering if the tool can help me build this app, given that I have zero knowledge in React. Knowing I got comfortable with relational MySQL database, can I use non rel firebase DB without getting lost or shall I root for Airtable, given the description of my project?

Please do not be over zealous or positive, your honest feedback will be most helpful. Knowing about a few caveats won’t turn me off, rather, they’ll prepare me for what’s at stake over here.

Thanks all.

Stripe payment is definitely possible. But the second part of the payout to service providers might cause a few troubles. I mean reading through the description this can be the most difficult part to handle.
As for design, you can create bootstrap like design, but that would involve quite a bit of time spent on creating unique styles for specific components.
Swipe is not yet available, so there is no chance for tinder-like swipe methods. But you can build cards with buttons (old-school, I know…) Vertical and horizontal scroll however is available. So you can build something similarish.
You can use QR-code generator API-s so that part is also possible. Surely you can build both the service provider Dashboard, client listing page, and super-admin as well.
As for Firebase noSQL, well… While everything is possible to create with that maybe you should stick with the type that you know best. REST APIs usually work pretty well here, so that should not be an issue for you.

For the final build, ios, android and webapps are easily buildable through the build service of Appgyver. Creating the PWA requires a little bit of afterwork, but also possible. (I managed to get it working, so that is why I say that.)

Final thoughts, good luck with your project. With a thorough consideration and planning I think this project is possible with Appgyver.

1 Like

I think the same would be the case here, more or less. In order to learn a new platform I would assume that it would have to be a lot better or easier to justify going through another learning curve and I don´t think that would be the case. The best documentation is that available in guides written by the community and the forum is quick with replies.

I love Appgyver, but its a long way from no code, especially for a complex solution like you describe. It has a good number of quirks and documentation issues too. The general rule is that if there is a viable workaround to a bug then the proper fix will be pretty much off the radar.

I certainly think you could deliver your required solution, but as the saying goes, better the devil you know versus the one you don´t.

If you decide to build here, I´d recommend tackling the hardest part you can imagine in your app first - get the data flows and payment in place. The GUI will find a way to be ok.

Good luck.

1 Like

Thanks for the detailed answer.
I see how no relational DB work so I’m not afraid of working with firestore. My main concern is two fold:
Can a no rel DB handle my multi select filtering? I was told relational DB are better suited…
Does no rel DB suit the structure of the information provided by the Service Providers? ie: Service provider1 may register service A, B and C, each with their specific pricing, location and theme (like gardening, sports, coaching…). So is no rel DB suitable for such structure, given that I want the individual to be able to carry out multi-select search?

I see Appgyver as a true no code tool vs Wappler as low code.
And the non rel DB setup seems much easier and faster with Appgyver/Firebase. I don’t have to think through the DB structure as much as with relational DB (think all the tables, the primary key, foreign ley,…).

Right, if I manage to go through that, I’ll be good.

I would still suggest spending most of your time with figuring out how to structure your data. I mean in a noSQL database it might seem to be easier, but in fact referencing to different collections might cause problems.
I don’t think that it would be an obstacle.

For your structure there should be a collection of services with records that have properties as you mentioned. Then the service providers collection with also the above mentioned properties and a specific property of list of texts, namely the services ids from the services collection and there you go. When retrieving one specific service providers data you can use a small loop in the logic to get all services and build a collection of records in appgyver.
Then I guess you would need service providers accounts collection which would in fact be a mixture of properties that can be found in a Firebase auth user and your specific properties like image, name etc… That should also have a reference to the specific service provider and so on.

The filtering may cause sometimes a few unnecessary reads which might increase a little bit on the cost of maintenance, but with clever design you can avoid that as well.

2 Likes

Thanks for your time.
Based on what you recommend, I’ve found this video detailing how to build Relational Data in Firestore NoSQL.

Do you agree with that solution?

1 Like

That is a good summary. The one thing to note is that you won’t be able to get the subcollection type of structure to get working with the Firebase connector of Appgyver. Only if you connect to it via Rest api. But that is also possible.

So to use the Firebase connector you would need to go with the last type of “flat” structure where you have collections of documents on the root level and reference to documents among those.

I doubt I’ll be able to pull this out correctly. I need to filter by price, category and location.
This is what I came up with for now. The below would only enable filtering by price, right?

If I can’t use the FB connector anyway, I guess I’m better off using airtable for relational data and connect via API connector.

I guess here you seem to be stuck on the structure.
I understand that you want to provide different bundles under a specific price.

What would be if you had ALL services in one collection and had their price (which is the bundle price based on the image above) just add inside the bundle properties? This removes 1 collection, flattens the db and there you have your filter chance to filter by both the price, category etc… All properties of the bundle.

I mean for sure it may seem weird for me what you show in the image, but this is most probably because I am not familiar with the exact specific ideas of your structure (and that is fine, since it is your app. :pray: )
I honestly wish you the best with your project wether you go for the Firebase connector or Airtable.

Ok, so here is my last attempt at trying to understand it all - and bothering you :wink:
At Google Firebase, I found two data structures of interest:

Subcollections

You can create collections within documents when you have data that might expand over time (my Service Providers count will indeed expand overtime). You also get full query capabilities on subcollections, and you can issue collection group queries across subcollections.

Root-level collections

Create collections at the root level of your database to organize disparate data sets. Root-level collections are good for many-to-many relationships and provide powerful querying within each collection.

Mihaly, @Phil_Evans what do you guys think for my multi-select filtering by price, location and category to work well?

Well, I just tested multi filter with “all” should match filtering with Firebase Connector and it worked with two properties. I do not see why it wouldn’t work with more properties to filter by. Oh, and the structure is root-level colelctions-type (as that is the thing that works with the connector)

I mean. On your second image you do not need anything else, just the first part of the image. The service providers collection.
Because if you want to show to the user only NYC cafes, you would do a get record collection flow with this filter conditions:

  • “location” equals “selected location”
  • “category” equals “gastronomy”
    *(Note this is just to show. The setting looks different)

It will return you a list of records (objects) from the service providers collection that match both criteria. This collection you can use in a container with text, image and whatsoever and set it to repeat with this data collection and that is it.

2 Likes

Thanks tons Mihaly! You seem to be the Firebase expert over here!

So to sum it up: a future app with the root-level collection would enable users to filter with three criteria at the same time: any cafes in NYC that are “worth” $15

So that Service Providers collection can have thousands or even millions of such documents with the details of each services, with no CRUD performance issues?

Sure the collection can have thousands of records. The thing to keep in mind is to carefully plan the query.

I mean you can have huge request, but for that you need to do a little more reading on how to limit the size, and do pagination of a request.

*I am no expert, but I think the Firebase Connector is one of the best additions to Appgyver.

1 Like

meaning like querying 50 records at a time?
I know hardly anything about appgyver so I feel clueless here. I guess, best is to start and find out…

Thanks a lot man!

After much research, I’ll go with a relational database. Too many limitations with non rel data (document size, mapping,…). I’m no expert enough to figure out all the workarounds.
I’ve already built my relational db in 2 hours with https://baserow.io/ :ok_hand:

1 Like

you’ve found a great fit here. you deserve Appgyver! Its perfect for you.

2 Likes

Mihaly,
Believe it or not but I’m back to Firestore due to better integration with AppGyver.
I learned a lot abt data modeling so I’m getting comfortable with it now.
Are you familiar with CORS configuration as laid out in the AppGyver tutorial?

Where do you add the * or the preview.appgyver.com ?

To allow Storage to be utilized on web, you need to add either * as an allowed CORS origin to enable requests from everywhere, or whitelist the domains from where your app will be accessed on the web. The latter means adding preview.appgyver.com, and when you’ve decided on it, the URL for the standalone deployment of your web app, e.g. my-firebase-tester.appgyverapp.com

Hmm, do you face the CORS issue or is it just precaution? I have been using Firebase Connector without CORS errors so far.
With Firestore you should not have any issues in the future either. In case you face any issue with the Storage maybe this can help You:

https://firebase.google.com/docs/storage/web/download-files#cors_configuration

But honestly, most of the issues with Firestore are null field values for fields that have a specified schema in the data resource configurator, or properties that are not existent, they may fail on using update record. So keep track of your data record properties.

Another thing to note that if you filter your data by multiple properties the first request will most probably fail and throw an error that the query requires index and will also provide a url. Open that url and it will automatically create the required index for you. After that you can query your data by multiple fields.

Also final thoughts, all Firebase projects have a corresponding Google Cloud Project which can open up huge potential if you read up on that. But that may involve a lot more learning. :wink:

2 Likes

No issues yet, just following AppGyver tutorials for configuring Storage.

You’re right, we “need to add * as an allowed CORS origin to enable requests from everywhere”, but my question is where do we copy/paste this code in the Firebase console?

[
  {
    "origin": ["*"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]