Show HN: I built Creodocs, a document creation platform based on LaTeX
creodocs.com
creodocs.com
The idea for Creodocs came about after I launched https://LaTeXTemplates.com and https://LaTeXTypesetting.com in 2012 and 2013, respectively. I noticed that academic documents and books consist almost entirely of content that changes across multiple instances of the template used to make them, but business documents are much more likely to consist of large proportions of static content. Think of receipts you receive from an online retailer; that company's information, branding and layout of the document doesn't change at all, but your account number, name, address and items purchased change.
I thought, well, what if I use the power of LaTeX to create virtually any design imaginable (combined with the ability to do math, use variables, etc), but abstract away the code (which is hard to master and archaic by modern standards), to allow users to specify just those dynamic parts of a document they need to fill out and keep the rest unchangeable.
Enter Creodocs, a document creation platform with a collection of templates available to all users, and the ability to add your own via a LaTeX template with variables specified. Variables each accept specific content types (int, bool, string, float) with a maximum length. Private templates can be shared with others, and there are billing groups to manage spending centrally. The idea is that a small/medium business would create (or have me create) a set of templates for documents they constantly produce, and then each of their staff (who don't know what LaTeX is) can log in and simply fill out a web form and get a consistent beautiful PDF document immediately. There is also the ability to create hundreds or thousands of documents at once using a spreadsheet, or create documents via an API without touching the website at all.
I'd love some feedback on the idea and implementation! At this stage, if you're interested in using it for your business, send me an email and you're welcome to use it all you want for free if I can get some feedback.
I'm also happy to chat about how the LaTeX world has changed in the last 10 years, or about how I've managed to have a steady stream of commercial clients willing to pay me to create custom LaTeX templates through my typesetting service.
Also the fact that cost is not easy to calculate creates a barrier to understanding what the cost would be, which less-motivated people may not bother overcoming.
What made you choose this model?
Ultimately, I don't know who is going to use the platform. It's created in a way that it can be just as useful for a random person who wants to make a few invoices per month, someone who wants to make 10,000 payslips every 2 weeks, and someone who wants to hook it up to their product to pump in data and receive a link to a PDF via the API. The first person would not pay for a subscription, it's just not worth it at their usage level. The second has burst bulk usage which should be discounted. The third has some level of sustained usage over time.
Those 3 use cases are covered by the 7 days, 30 days and 2 years pricing structures. If you're a casual user, pay a bit more and don't worry about expiration. If you're a bulk user, you get a discount. Everyone else can treat it like a subscription and get the best of both worlds.
I looked to websites that do similar things for ideas, and the closest I could come up with was sites like ShutterStock which also have a credit system where the more you buy the cheaper it is. I believe their credits expire after a fixed period too, but you don't get a discount for how long which is a bit more specific to my product.
Thanks for the feedback! How would you prefer to see a service like this priced that wouldn't cause price anxiety? I'd love to hear different ideas since this can be changed.
If something seems like a dark pattern, it is. I hate to be the bearer of bad news, but the ultimate judge of what is dark/what's not is the end user, and sending them a leaflet about how good it is doesn't do much to assuage their fears. I understand your motivations here, and sympathize with you as a developer: but as a user, I couldn't justify integrating this into my workflow.
He is a well known figure in the TeX community and has created a (open-source [2]/self-hostable) document creation solution on top of LuaTeX.
You can simply run that from the command-line and integrate it in your workflow but it also comes with a server integration that provides you with a REST API.
Admittedly there is some kind of learning curve (even for LaTeX literate people as he is using an XML/HTML abstraction layer on top of it) - but that also keeps it interesting for users who have never played mich with any TeX-language prior to that date.
[1]: https://www.speedata.de/en/ [2]: https://github.com/speedata/publisher
I'm not strictly opposed to the idea of self-hosting, although it would be far easier to pull out the API + queue + worker elements of the product rather than allowing self-hosting the whole thing. That way you self-host the production side and the document data doesn't leave your servers (which is likely to be a big deal for many businesses), but your templates and API calls are compatible with the online version of Creodocs. I'll try to get some more feedback on the pricing model and think about it myself, since it sounds like it's a bad one now. Thanks again for your feedback!
Edit: Creo alone is indeed a restricted trademark[0].
[0]: https://www.ptc.com/en/documents/policies/copyright-and-trad...
I chose Creo because it means "to create" in Latin (I'm a sucker for Latin names), with docs obviously being short for documents.
I'd argue that Creo is just a generic word, it's not like the name is Leicadocs where that word is very firmly tied to a single company.
IANAL.
1. You have no way of previewing your entered data - if you mess up, you just wasted 0.05 - 0.12 USD. Does it really cost that much to render a PDF once? With Overleaf, you get essentially unlimited previews. Consider providing a watermarked preview, or a lowly-res png render.
2. Why do the credits expire? As a casual user, I'd need to buy credits either again and again, or pay more than double the price so I can just use my credits. I think that's really unfair, and coupled with your pricing model above is limiting my interaction severely.
3. However, as a technically adept customer I like how it's done now. I can create as many free accounts as I like, each with about 7 USD worth of credits. I just need to set up a spam account every time I run out.
## Alternative model: ##
- Unlock templates by paying for them. All generation is then free (up to a certain high limit for your enterprise customers and limit abuse).
- Provide packages of templates to buy together (the finance department package, the communication package, ...) - For an even higher licensing fee, the templates can be downloaded as well and integrated into products.
I think this would suit your existing business of providing custom LaTeX templates well.
## Alternative model 2: ##
1. Bog standard subscription (pay x per month to do y pdfs)
## Security: ##
The rendered LaTeX may include files such as /etc/passwd. I did not try to get an RCE on your rendering server, but I'd spend some time isolating it as much as possible. Consider getting a pentest done, especially given your high privacy claims.
The lack of a preview and wasted credits on mistakes is something I'd like to improve in the medium term. The way it is now, content is completely separated from presentation, and I consider that a defining feature of the product. Of course, producing each document costs essentially nothing, and the lack of a preview may be very frustrating, so perhaps meeting somewhere in the middle in terms of a preview may be the way to go.
Your alternative models are excellent ideas and I will consider them as part of an overhaul of the pricing model, thanks!
The rendering happens in Docker on worker instances, but a pentest is something I will look to get as well. Disallowing things like including arbitrary files from the operating system in the LaTeX code is important, I agree.
That's at least my first two reactions upon seeing this. Don't get me wrong, this idea is something I've wanted for a long, long time. Holy cow though, talk about a dark pattern: your credits method (and their 60 day expiry) has completely soured this experience for me out of the gate. I'm not going to sign up for a platform that continues to nudge me down a waterslide towards my wallet. Seriously, I'd probably rather have a subscription model for something of this caliber. If you want to attract a business crowd, you shouldn't implement a pay-as-you-go model. These companies want to integrate you into their SAAS stack and consider you a fixed-rate expenditure, not constantly worry about budgeting you into a part of their payroll.
Briefly, I wanted to discount sporadic bulk usage (hence expiry of 7 days) and charge fairly for long term availability (expiry of 2 years), with everyone else being in the 30 days bucket and treating it like a subscription.
I'm aware that a larger company would not want to deal with purchasing regularly and my thinking was that the 2 years option is great for that. Buy a bunch of credits for 2 years and forget about them. If you stop using the product, just don't buy again, I'm not going to nag you for money. I haven't set up alerts that your credits are expiring soon or you're running out yet, but that would be the next logical step if I stay with this model.
I'd love to hear your ideas for how else I could price Creodocs! I'm open to anything, this was just the result of trying to accommodate the most use cases.
Extremely customer hostile pricing structure.
My friend had the idea that I could make all credits expire in 2 years (for the liability issue) and simply discount the cost/credit for larger numbers purchased at once, perhaps that would make it less confusing with the 7 days and 30 days options available currently? Perhaps combined with an option to repurchase the same amount automatically once your previous purchase expired/was used up would be better?
Thanks for the feedback, I thought the structure was actually customer-friendly (no subscriptions and lots of choice depending on your usage), but obviously I'm wrong from the feedback in this post. I'm definitely hearing that that's something I need to change.
You should execute the exact opposite pricing scheme: provide discounts to your most loyal customers who are willing to provide you cashflow long in advance of your incurring an expense to provide services to them in order finance your operation.
I'm actually curious though, do many online platforms allow you to buy credits that never expire? The stock photography websites were one of my inspirations for the pricing scheme, and their credits certainly expire in a year or so.
Are you worried about claims in bankruptcy court or something?
$12 over 2 years from 1000 people is a lot of headaches/dollar.
Product does look nifty, though.
Glad it looks nifty though!
Would you consider a combination of dollar balance, and membership ?
The membership cost itself would be a simple base price like $5. Its like the cost of a Costco membership. That helps keep the lights and manage some fixed costs.
While the dollar balance is used to create documents. To offer bulk-buyer discounts, you could consider discounting cost of dollar balances, for example $100 dollar balance costs $90.
Hmm, that's an interesting idea regarding the membership. I'll think about that as an option. Regarding the dollar balance, I didn't like the idea of using dollars and then discounting how much a dollar actually cost someone, since at that point you're effectively using a credit system that happens to be called dollar. But a membership where you get a base number of credits per month/year and then the ability to purchase more as needed (with bulk discounts) could work and I like it!
Thanks for the feedback and the idea of how to fix it!
Practically though I think people derive comfort in familiarity, even though dollar credits / cost are unintuitive in mathematical terms, people use dollars daily, even people who don’t use USD daily know the conversion from local cut to USD. And it makes the cost look really small, for example “0.5 cents” per document seems more familiar than “1 credit” per document even though the cost might be the same.
Out of curiosity, how do you handle external assets (e.g., images [1])?
Extending the retailer example - suppose such company would further like to include a thumbnail for each product in a receipt. Or, extending the inspection example included in the support section, suppose the sender wishes to include a blueprint or an external document. How should they proceed?
Some questions in anticipation. What if it is not possible to store the whole catalog locally for a given receipt template? What if catalog items are regarded as sensitive information for the company?
[1] https://tex.stackexchange.com/questions/5433/can-i-use-an-im...
Great question and observation! Currently, the platform doesn't handle external non-text assets at all. This is something I will definitely be incorporating in the future. You can submit a private template where you bundle your logo and any other images and those will compile as normal with \includegraphics{}, but users of the template can't submit images or other assets beyond text at this stage.
An image is a string of characters, so I don't imagine it will be too difficult to accept an image as a new document variable type, send it along with the bundle that goes to the workers, recreate it as a .jpg, and make use of it in the template. The difficulty then becomes coding the template in a way that if a user specifies a really tall or really wide image, the document still looks good.
I suggest embedding a demo video of someone using the product. A 30-45 second video ideally.
Make the page about the product, being as upfront as possible. This is the product, this is what it does, this is how you can access it.
For example, the way Apple does it: https://www.apple.com/iphone-12/ ... First thing you see is the product itself... then what it does, then how you can buy it (Apple used to be better at making these pages btw).
I did want to produce a GIF like that before launch, but I've spent over 6 years of my spare time working on Creodocs and I just really wanted to get it out already. I know I can pay someone to make the video, but since the product is likely to change visually, I'd like to learn to do it myself so I can remake the video after visual changes. Any suggestions for software to use?
Then, you can edit the video and remove any delays and stuff like that.
> managed to have a steady stream of commercial clients willing to pay me to create custom LaTeX templates through my typesetting service.
If you don't mind!
The typesetting service sprang from the modest success of LaTeX Templates. The large number of visitors meant that I had a constant stream of questions from individuals and businesses asking about modifying templates to include/change this or that. I did the whole free support thing for 1 or 2 years, but eventually realized it's a never-ending thankless task and I may as well try to capitalize on this desire that people have. Like with Creodocs, I had no idea whether anyone would pay me for this. The number of existing services was very small. I made the site and linked to it from LaTeX Templates, which is the perfect place to advertise, and eventually I started to get a trickle of clients. My rate initially was something like $30USD/hour, which was an insanely large amount for a poor PhD student, and I even remember a client saying I was way undercharging for the quality of work! As I've had more and more clients, I've built up the Showcase page to show off what the service is capable of, and I believe this is an important draw to give legitimacy to the service and show what LaTeX itself is capable of. I haven't asked, but I imagine most of my clients come from LaTeX Templates so the key for me has been to provide something for free and then upsell to a paid service. Nothing new there :)
Also great call about The Elements of Typographic Style. I'll add it to my todo list. Tufte - hmm yes classic text for sure... should probably get a copy too. So much to read!
Well, I also offer a service to create LaTeX templates, but yes, I know that limits the market and that's ok. I'm not trying to take over the world, I just want a "small Italian restaurant on the web", as DHH has said.
Good question regarding the advantage over mail merge. LaTeX is extremely customizable in the layouts it can create (see some of my past work here: https://www.latextypesetting.com/showcase), and the typesetting quality is top notch. From a technical perspective, LaTeX can do math, create functions, use variables, etc. For many use cases, and particularly if design isn't your priority, Google Docs and Word mail merge will be an easier solution and that's ok.
* I need to see samples on the homepage (I know what LaTeX is capable of but many don't and it would be nice to see what I'll get)
* I am not signing up just to test it, too much friction.
A gallery of templates like what you see when you log in is also on my TODO list.
>Creodocs lets you create consistent documents from beautiful templates online
>1. Select a document from the gallery
>2. Enter content for variable parts of the document
>3. Create and download your document as a PDF
They only really differ in two (2). That's basically introducing a form for every template or running a script on some data.
Creodocs explicitly does not allow you to make any changes to the document design or layout as a user. Want to increase the font size? You can't. Want to make something red? Unless it's already red, you can't. Of course that's a major limitation if you want to make changes, but it leads to highly consistent documents. Of course any given option can be exposed in the template if it's important, but the point is that templates are static by default.
Further, the document types that are best for the platforms differ. Creodocs should not be used to write an article, book or any document where there is a lot of text and custom elements (figures/tables). What it's designed for is documents like invoices, recipes, signs; all documents where there are relatively few changes between multiple instances of the document type and text is the main dynamic content.
Hope that makes sense and helps!