[HN Gopher] Show HN: SheetUI - Turn Google Sheets into Web Pages
       ___________________________________________________________________
        
       Show HN: SheetUI - Turn Google Sheets into Web Pages
        
       Author : tjchear
       Score  : 286 points
       Date   : 2020-07-07 16:30 UTC (6 hours ago)
        
 (HTM) web link (sheetui.com)
 (TXT) w3m dump (sheetui.com)
        
       | dvt wrote:
       | This is great, congrats on the launch! I've noticed a lot of
       | products recently that attempt to solve this.
        
         | tjchear wrote:
         | Got any examples of such products? I'd love to learn from them,
         | and hopefully find my own niche :)
        
           | dvt wrote:
           | Just a few that came up on my Google search (basically, most
           | are turning various sheets into something else!):
           | 
           | - https://news.ycombinator.com/item?id=16636935
           | 
           | - https://news.ycombinator.com/item?id=16636935
           | 
           | - https://news.ycombinator.com/item?id=19902856
           | 
           | - https://news.ycombinator.com/item?id=21004039
        
             | tjchear wrote:
             | Thanks! These products are great (I can see myself using a
             | couple of them). I think when we look across all industries
             | that use spreadsheets, we'll find a market that's so big
             | that any player can find their own profitable niche. I hope
             | to find mine.
        
       | paul_milovanov wrote:
       | Well, sheeeet.
       | 
       | (might want to rethink naming)
        
         | tjchear wrote:
         | It's definitely crossed my mind (and others as well). But as
         | long as it conveys the idea, I'm fine with it :)
        
       | rnotaro wrote:
       | Anyone have a end-result demo page that I can look at?
       | 
       | I would like to see what it looks like.
        
         | tjchear wrote:
         | Pardon the long links, this is something I'll address in the
         | next iteration.
         | 
         | Product Catalog: https://sheetui.com/view/grid/image-
         | tile/1F92PXwyE5CTjkT-Sin...
         | 
         | Pokemons: https://sheetui.com/view/responsive-grid/media-
         | card-2/1F92PX...
         | 
         | Team roster: https://sheetui.com/view/responsive-grid/media-
         | card-2/1F92PX...
        
       | CitrusFruits wrote:
       | Awesome work!
       | 
       | I can see another variation of this being useful as well. Instead
       | of loading live data all the time, it loads the data at time of
       | publishing and creates a static html page with an option to auto-
       | publish to github pages or netlify or something like that.
        
         | tjchear wrote:
         | Ooh, yes. I can see how this could be something that is sorely
         | needed. Added to my list of feature exploration!
        
       | rcshubhadeep wrote:
       | really cool. Love the idea.
        
       | [deleted]
        
       | julienb_sea wrote:
       | In college I would make primitive webpages for my college
       | newspaper to use for live feeds and such content publishing. I
       | built something like this (although vastly less polished) - the
       | writers could just fill in details in a sheet & add image URLs,
       | and my static page could retrieve the spreadsheet contents via
       | API and essentially have a super cheap data backend with a super
       | fancy collaborative editor. Fun times.
        
         | tjchear wrote:
         | That is the perfect use case! Sheets already got a lot of
         | features baked into it, no point re-inventing.
        
       | hogFeast wrote:
       | Does this only work with public sheets?
        
         | tjchear wrote:
         | For now, yes. I'm hard at work building Google Sheets API
         | integration so you won't have to make your sheet public.
        
           | hogFeast wrote:
           | But presumably, that is going to cost you $15k or whatever it
           | is now to be an approved user of Google API?
        
             | tjchear wrote:
             | I don't think so. I just need to procure an API key and
             | some credentials from Cloud Console to begin using Sheet
             | API. The rest is just a lot more backend development for
             | me.
        
               | hogFeast wrote:
               | Right, but won't you need permissions to access data in
               | user accounts? You can only get permissions with a Google
               | audit (which you have to pay for).
        
               | thesandlord wrote:
               | No, the easiest way is to use a service account and share
               | the sheet with the service account. No need for user
               | OAuth at all.
               | 
               | https://github.com/juampynr/google-spreadsheet-reader
        
               | hogFeast wrote:
               | Would you build a livelihood on that? I have heard of
               | that but it sounds like the kind of loophole that got the
               | industry into a situation where you needed to pay tens of
               | thousands to use an API.
        
               | detaro wrote:
               | You might be mixing up access to _GMail_ APIs with
               | general access to Google APIs? Reading people 's emails
               | comes with tons of red tape, other things not so much.
        
               | hogFeast wrote:
               | I am not -
               | https://support.google.com/cloud/answer/9110914?hl=en -
               | after Facebook, everyone is tightening up these
               | permissions.
        
               | detaro wrote:
               | Okay, it's wider than just GMail, I had missed the
               | addition of Drive, but according to that link an audit is
               | just required for
               | 
               | > _Drive - Any Drive API scope that permits an
               | application to read, modify, or manage the content or
               | metadata of a user's Drive files, without the user
               | individually granting file-by-file access._
               | 
               | I could be wrong, but to me this suggests you can use the
               | Sheets API against _a user-specified document_ without
               | it. It has it 's own namespace of scopes that's not under
               | _drive.X_
        
               | [deleted]
        
       | davide_v wrote:
       | If I update the sheet, the website updates too?
        
         | tjchear wrote:
         | The sheet is retrieved client-side, so yes, you should see the
         | new updates when you refresh the webpage.
        
       | vosper wrote:
       | You've done a wonderful job with explaining what it does, how,
       | and why, all on the landing page.
        
         | tjchear wrote:
         | Thank you! I was never good at doing landing pages so this
         | comment means a lot to me.
        
         | travbrack wrote:
         | The demo video is great. The only thing that could make it
         | better is if you put the finished product in the beginning,
         | then show how it's done.
        
           | tjchear wrote:
           | This is the sort of thing that makes perfect sense in
           | retrospect but I never thought about. Thanks for the tip!
        
       | notJim wrote:
       | How does this compare to sheet 2 site? Just wondering.
        
         | tjchear wrote:
         | Commented here: https://news.ycombinator.com/item?id=23761645
        
       | three_seagrass wrote:
       | Ha, does this qualify as a headless cms?
        
         | tjchear wrote:
         | Far from it! The backend is provided by Google Sheets. Much of
         | what I do with SheetUI is to provide an easy-to-use editor and
         | a beautiful front-end to visualize the data coming from the
         | sheets.
        
       | adamfeldman wrote:
       | It'd be interesting to use this alongside the Google Sheets
       | connector [1] for BigQuery
       | 
       | [1]: https://cloud.google.com/blog/products/g-suite/connecting-
       | bi...
        
         | tjchear wrote:
         | I can see a need for this. I'll look into it!
        
       | zenojevski wrote:
       | Not quite the same, but...
       | 
       | Turn your Google Sheets into a beautiful Gopherhole :)
       | 
       | https://github.com/zenoamaro/gophersheet
       | 
       | A much closer transformation.
        
         | tjchear wrote:
         | Ooh. Can you explain what a Gopherhole is?
        
           | 867-5309 wrote:
           | > Ooh
           | 
           | matron
        
       | czzarr wrote:
       | So why not use Awesome Table? one of the very top G Suite
       | Marketplace apps:
       | https://gsuite.google.com/marketplace/app/awesome_table/5608...
        
         | tjchear wrote:
         | Never heard of it, but it looks really well done! It also
         | mirrors Google Sheet's UI closely for easier onboarding. I
         | guess at this point you can say SheetUI is a pale copy of it
         | and I'd have nothing to counter. That said, their margin is my
         | opportunity, and I can definitely find opportunities amongst
         | users whom AwesomeTable has not fully satisfied. Thanks for
         | bringing this to my attention - I'll learn from them and
         | improve my craft.
        
       | alpb wrote:
       | I also recently built a URL shortener on top of Sheets API
       | (https://github.com/ahmetb/sheets-url-shortener) and I don't have
       | to worry about setting up a database or other form of storage.
       | All I needed to do was set up credentials, and it's good to go.
       | 
       | A lot of folks don't realize Google Sheets is like a free small
       | database with a decent API. :)
        
         | tjchear wrote:
         | Precisely! A lot of folks have already built their businesses
         | and processes atop Google Sheets, so it seems a no-brainer to
         | me that any SaaS dealing with data should have a way to
         | bootstrap from that.
        
       | anderspitman wrote:
       | Services like this need an easy way to allow people to use their
       | own domain names, and we need to lower the barrier of entry to
       | individuals registering domains and setting up HTTPS.
       | 
       | Imagine a SaaS that sells domains, then provides and easy (and
       | open) API for delegating control over subdomains using OAuth2.
       | 
       | So I sign up for sheetui, and during the registration process
       | they redirect me to a namecheap.com (where anderspitman.net is
       | registered) OAuth2 server, I grant them control over
       | sheetui.anderspitman.net, and they can now host there on my
       | behalf.
       | 
       | sheetui.com also shouldn't have to deal with TLS certs. Why
       | doesn't namecheap.com handle that for me?
       | 
       | HTTP requests can be proxied through something like ngrok which
       | again uses OAuth2 tokens for auth. Now we have a stack where
       | people can securely host websites from there phone.
        
         | vertex-four wrote:
         | Hahaha oh wow, I had a design document for this last year, down
         | to the details. OAuth2 doesn't quite fit the bill without a
         | little modification, unfortunately.
        
           | anderspitman wrote:
           | Would love to discuss it. I think this could be a solid
           | business. I have little interest in building it myself, but
           | may have to in order to make my other projects easier to
           | self-host. I keep bringing it up hoping to find out it
           | already exists.
           | 
           | What issues did you run into with OAuth2? Are you open to
           | sharing your design doc?
        
             | swyx wrote:
             | same, i think this is a great idea and dont want to build
             | it myself. hope you guys figure it out!
        
             | vertex-four wrote:
             | If you want to contact me, I'm shell@alterednarrative.net
             | on email and XMPP. I'll try and find whether I still have
             | the design notes, but doubt it; I've been through a couple
             | of laptops since and lost a lot.
             | 
             | One of my goals was that the flow could start from a
             | service provider - you type in the domain name you want the
             | service to be bound to on the service provider's website,
             | and it goes from there. If you were to use OAuth2 at this
             | point, there's no existing client ID/password, and allowing
             | public dynamic client registration leads to DoS potential
             | as someone could easily register a practically infinite
             | amount of clients and fill up disk space. So you want a
             | custom flow which winds up, at the end, with the consent of
             | the domain owner, returning OAuth2 credentials to the
             | service provider. This flow is fairly complex to spec out
             | in a way that doesn't have subtle security issues (e.g.
             | this initial flow can't trust much info from the service
             | provider which could be something akin to a phishing scam,
             | returning to the service provider on error has to be done
             | carefully because of risk of being used in an open redirect
             | chain, etc).
             | 
             | After that it's mostly a case of supplying auth keys for
             | RFC2136 so the service can manage its delegated domain,
             | handling credential rotation, and properly handling edge
             | cases like either the service provider or the domain
             | management system losing track of state, or the domain
             | being lost/transferred to another entity.
             | 
             | Honestly I'd like to build something like this for my own
             | projects, and might do so as a weekend project soon, esp
             | since it's just been validated as something useful. :D
        
               | anderspitman wrote:
               | I'll shoot you an email, and we can talk more if you do
               | end up working on this.
               | 
               | I'm not a big fan of pre-registered clients in the first
               | place. Ideally any client should be able to talk to any
               | OAuth2 server that speaks the same profile, ie endpoints
               | and scopes. Aaron Parecki describes a way to allow
               | "anonymous" clients here[0]. As I understand that's how
               | IndieAuth is implemented. But I'm still relatively new to
               | OAuth, and I don't doubt there could be subtle security
               | issues. Do you have any thoughts on that?
               | 
               | [0]: https://aaronparecki.com/2018/07/07/7/oauth-for-the-
               | open-web
        
         | tjchear wrote:
         | This is an interesting use case (the delegation of subdomain).
         | Sounds like something that can be built atop Amazon Route 53.
         | Have you seen this need come up a lot?
        
           | hanniabu wrote:
           | Personally I would love the ability to show data on my
           | website using a Google sheet where others less technical can
           | contribute to (open source projects) as opposed to editing
           | json files. It would only make sense for me to do it if it's
           | still hosted under my domain though.
        
           | anderspitman wrote:
           | I think it would be helpful for decentralizing things, ie
           | less necessary for the web we have than the web I want.
           | 
           | For example I'm working on a project right now that's ideal
           | for self-hosting, but I really want to encourage people to
           | use their own domain names, and registering them and handling
           | HTTPS is a rather large barrier.
        
       | kpennell wrote:
       | How to use google sheets + react together:
       | https://www.developintelligence.com/blog/2018/08/the-simple-...
        
       | akdarrah wrote:
       | This looks really cool! I love your quick video that shows how to
       | use the product and build a great looking UI so quickly.
       | 
       | I'm guessing you guys use Liquid based on the curly braces? It
       | looks like you have a pretty nice UI for manipulating the dynamic
       | data, but if you're interested, my product helps people write
       | Liquid: https://www.dropkiq.com/
       | 
       | Let me know if you're interested. Otherwise, best of luck with
       | your product!
        
         | tjchear wrote:
         | I implemented the parsing part! This is the first I've heard of
         | Liquid though. When SheetUI has gained sufficient traction that
         | people need advanced Liquid support, I'll look to your product
         | for that :) There is no price quoted on your page though; do
         | you mind telling us here a ballpark figure?
        
           | akdarrah wrote:
           | Awesome! Yea, Liquid is a pretty robust language built by
           | Shopify that is implemented in most languages to help with
           | this exact problem. It might come in handy some day as you
           | scale your app. :)
           | 
           | For Dropkiq, your app looks simple enough (for the Liquid
           | part) that you could likely use our free version. For apps
           | that have complex Liquid, we have our Pro version, which I'm
           | currently offering beta pricing at around 1K per year.
           | 
           | Keep us in mind as you grow! :D
        
             | tjchear wrote:
             | Got it akdarrah! Thanks for letting me know about Liquid
             | and your wonderful product!
        
       | kovek wrote:
       | Is there a tool that does the reverse? It would also be very
       | interesting. Turn any webpage into a spreadsheet.
        
         | jeffbee wrote:
         | Sheets itself does a remarkable job of pasting HTML into a
         | sheet. I just tried it with English Wikipedia's list of the
         | world's largest cities and it worked perfectly, except the
         | column of photographs is blank instead, which is a reasonable
         | choice.
        
         | tjchear wrote:
         | There was one other comment that mentioned the same thing. I'll
         | look into this. How can I chat with you further about this? My
         | email's tjchear at gmail if you want to reach out.
        
       | londons_explore wrote:
       | This product is great... But it makes me feel sad to think about
       | all the webpages that hide a small amount of tabular data in an
       | oversized web UI.
       | 
       | I want the reverse of this service - I just want the raw data
       | from any web page in a spreadsheet ready to filter and sort and
       | define new columns as I please...
        
         | contravariant wrote:
         | This is one of the reasons I really like that some webpages
         | have taken to using JSON REST endpoints to provide the data for
         | their (usually React-based) webpage. It makes it fantastically
         | easy to circumvent all the complicated stuff and just directly
         | access the data.
         | 
         | It's somewhat of a shame that HTML never quite managed to split
         | data from representation. It managed to separate content and
         | styling, but the content is still treated as some kind of text
         | document, not a textual representation of some data.
        
           | tjchear wrote:
           | Like it or not, it's the reality we're in. It's not going
           | away anytime soon, but we can always achieve incremental
           | improvements towards that ideal through HTML
           | standardizations. React and GraphQL (both great products from
           | fb) really make that possible.
        
         | tjchear wrote:
         | What you just described is essentially a scraper/crawler right?
         | Would scraping them into a sheet you own be sufficient for your
         | use case?
        
           | londons_explore wrote:
           | Yes, but currently the process of writing a scraper for a
           | given page is usually half an hour with beautiful soup... Or
           | more if you have to handle multiple pages, Auth cookies that
           | expire, and rate limits.
           | 
           | Example usecase:. eBay search results, I want to sort by
           | "Price plus $0.50 per mile from me", since I'm going to have
           | to drive my van to pick up the item.
           | 
           | That would be super easy with a spreadsheet of the search
           | results, and I could probably have the data sorted in under
           | 60 seconds on a column of "=B5+C5*0.5"
        
             | tjchear wrote:
             | It's the complete opposite of what SheetUI hopes to
             | achieve, but this is such an interesting use case I'll
             | think more about it :) I can see how there might be a
             | legitimately strong demand for it. Feel free to connect
             | with me (tjchear on twitter/linkedin/gmail) to discuss this
             | further.
        
       | abhisheksamanta wrote:
       | This is awesome. Congratulations, and best of luck. I played
       | around with the product little bit and it looks really nice.
        
         | tjchear wrote:
         | Thank you! I hope all is well with you and your project!
        
       | tjchear wrote:
       | FYI to folks who are trying it out now - on step 3, you'll have
       | to click on an element on the preview UI so you could customize
       | it. You can customize it to show a particular column by clicking
       | the + button. Without customization, the resulting page will not
       | show anything.
       | 
       | I'll fix this in the next iteration by providing defaults.
        
         | Shermanium wrote:
         | thanks - emailing you about my project!
        
       | Giorgi wrote:
       | Might I ask what soft was used to record demo?
        
         | tjchear wrote:
         | It's a Chrome extension called Screen Recorder. Very nifty!
         | I've used it for my other projects and I'm happy with it. Only
         | downside is it generates webm only - I had to put it through an
         | encoder.
        
       | fortylove wrote:
       | Very cool! I can see this being especially useful for
       | communicating status of some process status, like for example, #
       | of tests run today, outcome, etc.
        
         | tjchear wrote:
         | I never thought about this use case! I'll note this down and
         | include it as part of the use case section :) Thanks for the
         | idea!
        
       | tjchear wrote:
       | So from talking to people I see a need to quickly turn a
       | spreadsheet of information into something visually pleasing.
       | SheetUI is my response to that need. You give it a Google Sheet
       | URL, pick a template, and tap in the columns where you want them
       | to show up. In return you get a visually pleasing and responsive
       | web page that you can embed on your site, or link to in your
       | newsletter or chat with a client.
       | 
       | Created with React and Material-UI, plus some spreadsheet
       | fetching and parsing code.
       | 
       | Glad to answer any questions!
        
         | johnx123-up wrote:
         | Any comparison with Glide?
        
           | tjchear wrote:
           | Ah yes. SheetUI turns a spreadsheet into a simple but
           | pleasing web page, while Glide turns them into an app. That
           | said, adding interactivity, crud capabilities, and just
           | generally making a web app out of it is definitely part of my
           | feature roadmap.
        
             | dmlittle wrote:
             | Not sure if you've heard of Sheet2Site[1] which I believe
             | is a direct competitor.
             | 
             | [1] https://sheet2site.com/
        
               | tjchear wrote:
               | Yeah definitely! They generate an entire site complete
               | with beautiful template and search functionalities.
               | Really amazing work. My niche is smaller in comparison -
               | SheetUI generates a single webpage for each sheet. That
               | said, generating a complete website/webapp is definitely
               | part of my feature roadmap.
        
         | platetone wrote:
         | very nice... curious if you could embed it easily into another
         | site or even wordpress page? I have had an HOA membership page
         | that is backed by a Google Spreadsheet with some crap Sheets
         | plugin that's always having trouble.
        
           | tjchear wrote:
           | That is definitely possible. I can make some changes to
           | generate an iframe embed code. Email or DM me on Twitter
           | (@tjchear) if you want something customized :)
        
         | eyelidlessness wrote:
         | This looks really cool. I have a potential use case I'd
         | consider using this for, but I don't want to make the sheet (or
         | resulting page) public. Have you considered support for OAuth
         | to retrieve private sheets?
        
           | czzarr wrote:
           | Try Awesome Table, it's been here for years for exactly that
           | purpose and is one of the very top G Suite Marketplace apps: 
           | https://gsuite.google.com/marketplace/app/awesome_table/5608.
           | ..
        
           | tjchear wrote:
           | Yes, definitely. I'm hard at work building Google Sheets API
           | integration, so you wouldn't have to make your sheet public.
           | DM me (@tjchear on Twitter) or email me to discuss your use
           | case.
        
         | franciscop wrote:
         | This looks great! I made a while back a library[1] to do this,
         | but of course you still have to code on top of it (which is
         | what I wanted). Your project makes it very easy for everyone to
         | get started and not only those who know how to code, props on
         | launching it.
         | 
         | Are you using Node.js? Would love some feedback on my lib since
         | it seems we are doing the same thing for different user types!
         | 
         | [1] https://github.com/franciscop/drive-db
        
         | joelrunyon wrote:
         | Do you have demos of current sites using this?
        
         | vijaybritto wrote:
         | Massive kudos to the effort. The Gsheets API is notoriously
         | hard to understand and work with. I see that you have put it to
         | good use! Great work!
        
           | tjchear wrote:
           | Thank you! I have yet to use the Cloud GSheets API; there's a
           | much simpler approach, but it requires the user to publish
           | their sheet on the web. I'm definitely working on GSheets API
           | integration so users would not have to publish their sheet
           | though.
        
         | wiremine wrote:
         | Great idea! The video on the homepage is very useful; have you
         | thought about linking to some examples?
        
           | tjchear wrote:
           | Oh this is a good idea! Let me do that.
        
             | [deleted]
        
           | tjchear wrote:
           | I added one so far (Product Catalog), you can click on it in
           | the use case section. More to come :)
        
             | wiremine wrote:
             | Nice! I would recommend making the link clearer: unless I
             | knew it was there, I would have missed it.
        
               | tjchear wrote:
               | Got it! I bolded the text. Also added one for Article
               | Curation. Thank you for your advice and suggestion!
        
               | gabagool wrote:
               | I missed it even after your changes until I read this
               | thread. Maybe modifying the CSS is too much of an ask,
               | but I personally think the link color should be a bit
               | differentiated, the link should be underlined, or the
               | link should be moved since I didn't expect a link there.
        
       | bawana wrote:
       | I guess I could put blog entries into a google sheet and publish
       | them with this.
        
         | tjchear wrote:
         | Yes, that is a great use case! Let me know how it works for
         | you. Feel free to reach out to me at tjchear over
         | twitter/linkedin/gmail.
        
       | greatNespresso wrote:
       | Love the execution of your idea. Having played with google sheet
       | too (using it as my storage for https://nooze.world actually) and
       | having followed sheet2site story, I am left wondering if there is
       | still money to make for services like this in 2020.
        
         | tjchear wrote:
         | There is always room for improvement! For now, SheetUI doesn't
         | do the same thing as Sheet2Site (they generate an entire
         | website, whereas SheetUI generates only single web page per
         | sheet).
         | 
         | Considering how many people across so many industries use
         | Google Sheets as part of their processes, I'm convinced there
         | is some money to be made.
        
       | [deleted]
        
       | uptown wrote:
       | I used to drive a restaurant website's menu using a shared Google
       | sheet. It was an easy way for multiple people to have access to
       | update the content. I'd cached the recent versions in-case anyone
       | made a breaking formatting change or Google was unavailable.
       | Worked very well for our use-case.
        
         | tjchear wrote:
         | That's a good point. I should cache the generated sites or the
         | sheet's data in case the sheet server goes down.
        
       | alin23 wrote:
       | Great idea and execution! I've been using Liftoff[1] with
       | Airtable as a DIY solution for this and while it's been easy to
       | set it up and deploy it on Netlify, I still had to resort to
       | writing a custom watch for changes daemon and forking the repo
       | for adjusting the components layout.
       | 
       | I like that SheetUI has the things above built-in and more
       | functionalities like adding buttons and a customisation UI.
       | 
       | Is a custom-CSS feature going to be available anytime soon? It
       | would be great to be able to add some original styling to a
       | website.
       | 
       | [1] https://github.com/postlight/liftoff
        
         | tjchear wrote:
         | SheetUI is built using Material UI, which I'm still getting the
         | hang of. It certainly has support for parameterized themes. As
         | for custom CSS, I'm going to have to look into how to do that
         | technically while making sure there's no security implications.
         | 
         | Thanks for showing me Liftoff! The generated websites look
         | great. I'll see what I can learn from it.
        
           | alin23 wrote:
           | I think just allowing a CSS textarea input that can be
           | injected inside a <style> HTML tag is enough. If the input is
           | HTML escaped (replace <, > and other dangerous characters)
           | then nothing should escape out of that tag.
           | 
           | Thank you for considering this!
        
       ___________________________________________________________________
       (page generated 2020-07-07 23:00 UTC)