Not a problem! I’ve learned so much from the community here. I’m happy to give back.
My app is a publishing platform called Masslore (https://masslore.com to learn more). My community is building fictional universes (sci-fi/fantasy type stuff) by telling micro-stories all within a shared growing history of these worlds. Their stories are in-fact adding new elements to the worlds which all members of the community are free to use (and are encouraged to use) in their stories.
Stories can be text or image. So early on, my challenge was how to present that content to readers in a way that was both beautiful and standardized… like a traditional publisher. I was originally using the Glide Rich Text component for text and image component for uploaded images. My first problem was I could not present both text and graphical stories in the same feed. I had to create two. One inline list for text posts. And one for image. This bothered me. Especially since Inline List is not meant for Text. It’s meant for images and the text is meant to simply give context to the image. So it has very limited wrapping capabilities. It just wasn’t great.
The Masslore platform also encourages published posts to be micro in size. So users upload in bite-sized pieces that resemble more like a page in a book. If they want to write a much longer work, they just publish many of them (and can even bind them together with a book cover). This was also a challenge, because Glide does not have a character limiter the way you would find in almost any social media platform. So I had no way to limit their content in app. I created formulas in my spreadsheet to truncate after a certain character limit, but it slowed my sheet and users were writing in the dark, not knowing if they had exceeded the limit.
Then one day @Robert_Petitto shared a post about Cloudinary. It’s funny, because I didn’t see its usefulness to me at first. I remember even asking him how it was more beneficial to doing manipulations yourself and creating logic in Glide/Sheets. And in many cases you can do the processing yourself and have code decide what image is presented. But if you want complex dynamic processing in real time… Cloudinary… oh you beautiful Cloudinary. And this is exactly what I needed to create a standard on Masslore.
Uploaded text and graphics would now both be jpeg images. I would have Cloudinary place Text onto what looks like a dark book page. I would use their Text overlay parameters to give it a nice Serif font as if it was a page from a published work. I’d constrain it to 2:3 so it would fit perfectly in the inline list, and for uploaded graphics I would do the same. And that’s what I did. Using all the data a user uploads: their story, their story title, it’s relationship to other previous published works, etc. I send it all over to Cloudinary in the form of a specially coded URL and Cloudinary makes me an image that lives at that URL. Those URLs are stored in a column in the content sheet, and that column is being used by an inline list… in the order of publication. Text and comic book style works all grouped together in a sort of Twitter of storytelling.
Whats more, since I now know the dimensions of the published Text works, I can create my own input field that not only limits their text, but shows them how many characters they’ve used, and even keeps the exact formatting as it will look on the page. Check it out: https://masslore.com/drafting/
I use a button within forms to access this link within the app, and now I’m going to switch those buttons to WebView. It’s not perfect, but they can write there, copy the text and paste it knowing exactly what their work will look like in the feed. And it’s the beginning of what will eventually be my own uploading form within the app.
1 - the only images I uploaded to Cloudinary were assets that are used in everyone’s published works. So for example, I mentioned that Text works are placed on what looks like a dark piece of paper. It’s the same piece of paper for everyone, so I uploaded that to Cloudinary and gave it a name there that is always used in the URL. For any images that are dynamically used in a finalized work, Cloudinary uses what’s called a Fetch command. As the word implies, it “fetches” the image for you. So if someone uploads a new image that is used in that finished story-work, the URL link will tell Cloudinary where that image is online and Cloudinary will download it into your Cloudinary account before it does the image processing (a split second process). For example, with text works, I have Cloudinary place user avatars in the upper right corner because Glide only provides avatar placement on the left. So my Cloudinary URL includes the link to people’s Avatars uploaded to Glide.
2 - Cloudinary uses a credit system, but it’s much more than it sounds. For every credit, you get 1000 transformations or 1000 MB of bandwidth (yes, the amount of times users have seen your images processed by Cloudinary) per month. Cloudinary’s free plan starts you with 25. So that’s either 25k transformations or 25GB of storage. If you tweet and send a facebook post about them, you get a bit more, and if you get others to sign up for the service you get 3 more per person up to 20 people (7 if they pay for a plan). So just from their free plan, you can have up to 99 free credits if you work it right. That’s a TON. To give you an idea. I’ve been using it for the past month. My largest day was almost a month ago, when I was testing the system and created 2k+ transformations in a day trying to figure out the best look for my works. Since then, the usage has been moderate. My month is about to end, and I’ve used 5% of my full 39 credits. Granted, my app is not massive. We have about 100 people viewing and creating content. But you get the idea. Cloudinary gives you plenty to get started as a do-it-yourself entrepreneur.
3 - A transformation is when Cloudinary takes a bunch of assets and turns them into a new image. When a user uploads a new piece of content Text or Image, this counts as 1 transformation. The newly created image is stored on Cloudinary’s server and from then on, anyone who views the image is simply taking from your 1000MB per credit bandwidth usage. Again, the word “credit” is deceptive. You don’t get 25 credits for 25 transformations. You get 25 credits for 25k transformation or 25GB of bandwidth per month (whichever of the two comes first). I doubt there are many here at Glide who will tear through this amount.
4 - We all face GDPR challenges. But Cloudinary is no more challenging than the current ones faced with Glide itself. In many ways, it’s less challenging. With Glide, when a user uploads an image, it lives in a place I cannot access to delete it. With cloudinary, you have access to every image you have uploaded yourself, or that Cloudinary has downloaded for the transformation, as well as all finished transformed images. You can delete anything you want and have full control. Many of the works that Cloudinary is using are uploaded images that have been uploaded to Glide. So even with the control I have within Cloudinary, I am still faced with little control over that image in Glide. I’m sure this will change soon. Glide recently updated the URL for uploaded images, so I imagine that is in preparation for some kind of way to access uploaded images from within Glide dashboard.
I should also add that since my platform is one that leverages shared works, the images and content users are uploading have elements of other user’s content in them. In order to do this, creators agree to give the platform full rights over the published works. Similar to Unsplash, I suppose, but a bit stronger in that it allows the platform to display works indefinitely regardless of GDPR, because users are giving the platform rights over the images. That doesn’t address personal images like Avatars which the platform cannot control… but as I said, until Glide gives us a way to delete user Avatars, we are all navigating tricky waters there. But with Cloudinary, I have full control. I can browse through everything there and delete anything I want.
Hope this was helpful.