Show HN: Struct – A Feed-Centric Chat Platform (struct.ai)
At Struct, we're frustrated by the clutter, distractions, and inefficiencies plaguing existing chat platforms like Slack and Discord.
We've built a radical new chat platform that leverages threads, feeds, and AI to help alleviate these problems, and give you back more time in your day.
Struct uses a thread-first approach to keep conversations on-topic. It applies AI-generated titles and summaries to help you decide what's worth your attention. Threads are then organized in a real-time feed, keeping all your conversations up-to-date and at the ready, eliminating the need for channel hopping.
Comprehensive search tools make finding things a breeze, and Strucbot, our AI assistant can answer questions based on what it’s learned from prior threads. It can even proactively respond when it notices repeat requests, providing quick answers so you don’t have to. Structbot is fully GPT-4 enabled, so you can riff with Chat GPT and your peers (generate code, ask questions, all the good stuff) without ever switching apps.
Struct is available on Linux, Windows, Mac, and even works as a Slack interface. Give us a try and let us know what you think.
142 comments
[ 5.9 ms ] story [ 193 ms ] threadIt’s my own little discord server so I have a super low volume of messages :-)
https://bembem.struct.ai/
On Discord, the bot only picks up Discord threads, not the chats in a channel. Could that be it? Unless there's some issue with sync.
Chats in channels are too diverse to act like threads. Jury is out on how good those threads look.
Chat there!
Teams is a different product. Companies who use Teams are there because they have tight integration with Microsoft Office, which is the USP there.
We also don't use Threads in Teams. Things got lost trying to jump back and forth between the "Chat" tab and the "Teams" tab. So now, we just create a new chat conversation for each project we're working on and add the relevant participates and rename the chat to the Jira Ticket #. That provides enough context/summary for what the chat is about.
All that said, Struct looks really nice and I could see it benefitting our team. Especially the AI portion. We have chats going back years for long-lived projects that get shelved and then picked back up later. Being able to interact with a ChatBot to help find answers within these chats would be killer. I assume there are no plans for a Struct for Teams though.
We'd surely look into Teams integration at some point. Though, I'm not sure how many takers would be there for Teams/Struct integration. My perception is that Teams users tend to be medium-to-large businesses who are tied to Microsoft Office, and would be very hard to sell to. I might be wrong.
Privacy. That's Struct.
The Struct app is the result of a meticulous design process, one focused on minimalism and efficiency. Our interface is deliberately subtle to ensure a distraction-free environment for work. It's completely brand-agnostic, free from any disruptive colors or logos.
We have lots of keyboard shortcuts for fast navigation, and a dark mode to reduce eye strain in low-light environments. We’re also committed to meeting users wherever they are — the app works on Windows, Mac, or Linux.
Now... I'm hoping this was just a copywriting fail, perhaps you trusted some ChatGPT output a little more than you should and as a startup you don't exactly have heaps of spare people to re-read things that seem good to go... But the problem is that Privacy is a pretty important detail when it comes to communications between people, a lot of us like to know who else can read our messages, where they're sent, how they're stored... that sort of thing.
So I keep reading, and re-read it a few times... and nope sorry... I cant connect the line in the H1, to anything in the following two paragraph tags. Your two paragraphs about how minimal and easy to use the app is... have nothing to do with privacy... and the conspicuous absence of anything about privacy after a statement saying how about privacy you are, has immediately made me incredibly suspicious of your company, and its otherwise interesting product...
Since you might still be reading comments jdplex hopefully you see this... You might want to fix your copy before it puts off more potential customers... But unless its a whole bunch of missing extra information about actual good privacy related, you've probably already lost me as a possible customer due to too much suspicion.
Thanks for catching this copy error. I read this thing a hundred times and got blind to it. grrr
I'm pretty sure almost everyone will make the the mistake of leaving something out or adding something in the wrong place at least once. The human brain is pretty good at doing clever things like a gap in words with what it thinks should be there, or skipping over little things that shouldn't... or unscrambling usftf that is just completely up.
;-)
Also I edited my comment reflect that it was a mistake.
Scrambled or unscrambled I'm sure my brain can find a way to screw it up :)
First-class topics, tools for organizing messages between streams & topics, open-source self-hostable, no engagement of ML out of the box (but probably possible thanks to Python plugin support), Vim-like keyboard shortcuts.
Struct is different. It's a reimagination of what a chat platform would look like if you were to completely give up the idea of chats in a serial log of channels (IRC, Slack, Discord), and embrace threads and feeds whole-heartedly. When everything is a thread, the platform can work remarkably well for users.
I don't understand why I'd need or want this. I saw it in the video and was horrified. Multiple feeds updating as I'm watching them is just too much going on.
When I'm chatting, I don't want to pay attention to 10 different things at once. I'm most productive when I am working on one task (with a single topic), which may require me to refer back to Slack periodically.
Struct looks like it has two differentiating features: 1) it surfaces irrelevant distractions in the All Threads channel, and 2) it creates the tl;dr summary. The former seems actively harmful to productivity, and the latter seems like it could be useful.
That's the beauty right -- you can control and filter what you see. As opposed to channel based interactions, where your boundaries are set in stone on channel creation.
I believe it does. You get a feed of all messages; and still organized by a topic, quite conveniently.
I don’t use it, though, since from anywhere in GUI I can immediately jump to the next unread message, irregardless of topic or stream, simply by pressing “n” on keyboard (preceded by Esc if I happened to be typing; my draft is saved reliably).
- https://zulip.com/help/inbox
- https://zulip.com/help/recent-conversations
- https://zulip.com/help/all-messages
For large and small companies surely the best way to maintain their users
Demanding SSO from Zulip would be like demanding SSO from self-hostable Discourse, Jitsi, etc.
I'm just so, so tired of LLMs and having to work around all the new and surprising ways they don't quite work the way they're supposed to. At the very least, when other programs don't work the way I want them to, I can usually get used to the issue or find a workaround sometimes. When something is AI-powered, I just have to kind of resign myself to the fact that sometimes it's just... not gonna do the thing. And usually in a new way that I have to develop a new workaround for, or sometimes there's just no workaround, it just sometimes doesn't work and you have to deal with that!
It's like I can never develop any sort of armour around the rushed or poor decisions and features I encounter, because it's fresh, interesting poor decisions, automated at scale!
TLDR: AI word is overthrown these days, sorry about that. But, what makes Struct different isn't AI. It's feeds and threads.
Longer version: The AI in Struct is, IMO, a balanced approach. Struct is different, not because of AI. It's different because of going hard on feeds and threads.
And AI helps in generating titles and summaries for threads -- something which pre-2023 me would have basically asked the user to create. In fact, that was the original idea that users would set their own titles for threads. But, users are forgetful and threads deviate from their intended purpose. And that's where AI can really help -- keep both title and summary up to date.
And you could stop there with the AI.
But, then you start playing with Struct bot, and it's ability to recall bits of information from older threads -- that's really nice. It's saved me so much digging around, personally. But, it's optional, you never have to talk to it.
Only question: long-term plans? Before I commit a lot of data to something like this it'd be good to know it's not a VC flip and dump.
We intend to keep Struct running. Struct is built with a small of 3: Backend, Designer and Frontend. It's not that capital intensive.
We have a roadmap of features that we're excited to get to, combining both teams and community usecases:
- Enable audio / video calls, webinars. - Various spam control systems for community. - Improving the AI bot and recall, making it cheaper to run. - Index the docs shared on Struct, so AI can respond to questions from there as well (obv while maintaining access control) - the list goes on.
The thing is. What excites me about Struct is that, it combines a bunch of use cases for us.Struct is replacing two chat platforms (team and community), a task management system, a ChatGPT, my personal TODO list, a publicly indexable knowledge-base for us.
It's amazing what you can do when you can trust a system to not forget.
Try and maintain that for as long as you can.
I'm out. Sorry, but this is just obnoxious.
It feels, somehow, less personal. Where Slack rooms felt like digital _rooms_, this gave me the feeling of an office bulletin board. I'm imagining being a new employee at a company that is fully bought in on Struct, and somehow I feel like developing personal connections with my coworkers would be more difficult. I don't really get why, that's just my first impression from the demo.
Otherwise, as a currently funemployed but past SV eng leader, I would have loved to have had this at my last company while dealing with all of the communication chaos that entails.
If you look at feed based platforms, they tend to get very asynchronous (almost forum like). And so our design for the real-timeness of the feed was to emphasize the fact that you're in this room with these people, and they're talking right now. It's really fun when a new thread pops up, or a new chat emerges in the feed. That is exciting.
I think perhaps it would help to show a list of online people, so you feel like starting a conversation. Or, perhaps, just seeing other people participate would help. There's surely room to optimize to get the conversations going.
Otherwise, I totally get the problem you're trying to solve so I poked it and quite liked it.
As someone with 2091 years worth of Slack convos (and Slack wanting me to upgrade to export them) can you let me know how you handle imports and exports?
We don't have an exporter yet, but can surely put one together which provides a SQL / CSV formatted output (or whatever works best for users). We would never charge for exports.
But I hear you, ensuring new employees to feel warm and welcomed is crucial for every organization. Especially true for orgs that lean more remote.
Orgs can still use @random channels, @club-channels and you could set up an @annoucements to have spaces for fun links and bulletin materials, and other ways to get to know your peers.
@struct we lean pretty work-focused, we love building. But we should bring the fun too!
Out of curiosity, I wonder if you could share some of the tech you used? Any dgraph or badger under the hood by any chance? :-) How about hosting? Big three or something else? K8s or no? Elastic Search? etc.
Edit: Also curious if struct is supposed to online scrape slack/discord or become and standalone chat app now/in the future.
- Go - Postgres - OpenAI (biggest bill producer is this) - React / Next.JS - Loops.so for Emails - Imgproxy for handling images - Microsoft E5 for embeddings (not OpenAI) - Typesense for Search (also a user of Struct) - Figma (design) - Framer (website) - Server on Hetzner
Badger wouldn't have made sense to use instead of Postgres. I'm thinking of using Badger for other purposes. I do use ristretto and roaring bitmaps a lot internally.
Struct has a very nice integration with Slack. So, you can actually use Struct as a Slack interface. Essentially, your peers can be using Slack, while you could responding to them via Struct - think Superhuman for Gmail.
We have a good integration with Discord too. Both are being used by OSS companies to generate public knowledge bases from their Slack/Discord conversations.
[1]: https://github.com/struct-chat/embedding
Would love to learn what integrations you use, and in what capacity. Based on my interactions, it's really only a few integrations that 80% Slack users use.
As mentioned elsewhere, Struct is replacing two chat platforms (team and community), a task management system, a ChatGPT, my personal TODO list, a publicly indexable knowledge-base for us.
It's nice when you don't have to treat your chat platform as an ephemeral, knowledge void.
A few questions I jotted down while watching the video on Struct's landing page:
1. the concept of channels seems to be important on Struct as channels are the starting point of threads/feeds. Could you clarify the concept of channels on Struct? Is it just a concept to group users? Can you also chat on channels?
2. Conceptually how do you handle the fact that only the threads on the realtime feed are visible to the user? Maybe there's a low-signal high-activity thread that takes space and hides the high-signal low-activity thread which results in users missing important information or reminders.
3. Tags are crucial for filtering threads, is there a way to "police" the tags? Using tags usually grow into a mess of similar-but-not-the-same collection of text. Think of JIRA tags.
4. How to handle threads created independently by different users but discussing the same topic?
5. Not a question, but I'd be interested in knowing more about private conversations between two parties. It's mentioned only briefly in the video.
Hopefully these questions don't come out as overly critical. The tool definitely has potential.
1. Channels for Struct are just groups of people. You engage with a channel, just like you'd engage with a user. You start a thread, and then mention users or channels to define access for that thread. You don't go to a channel to chat.
2. A thread can only take so much space on the feed. The height per thread is fixed. So, both the threads you mentioned could be in the feed, visible to the user. We'd also add a way to archive or mute a thread for some time, that should help with cleaning up that feed.
3. There's a limit on how many tags can be added per thread. Tags help with adding context, and more importantly, very useful for creating custom feeds. We use them for tracking task priorities, which converts our Struct into a lightweight task management system. Nothing to beat Jira, but it's nice to have just one platform for all discussions.
We'd allow tags to be merged. That should deal with similar tags growing parallely, creating confusion. And perhaps, we can also limit new tag creation to moderators. Many controls are possible.
4. You can merge similar threads. You can also select a bunch of chats in a thread and fork them into a new thread. We'd maintain links between threads. Coming soon.
5. To do a private conversation (DM), just mention the users you want to DM with. For example, mentioning @struct would invoke a DM between you and the bot. Mentioning yourself would create a "self-DM" (useful for TODOs, or just remembering stuff, or as a starter thread which you later mention other users/channels to expand reach).
Keep the questions coming. I know the market is filled with chat platforms, and Struct might feel like "yet another". But, I've looked and waited for years for other platforms to do what I thought should be obvious, but they didn't. And that's why I decided to build Struct.
Just want to chime in and say this is an essential feature IMO, I hope it’s prioritized.
People will keep finding ways to steal your attention if they want it (starting new threads, etc).
https://blog.discourse.org/2018/06/understanding-discourse-t...
Also, what's with minimum 6-character requirement for a Struct name? Anything from 4-characters should be fine, right -- there are no more international standards beyond 3-characters!
Edit: A small request, please make the App Icon solid like all the other macOS Apps.
Short story: It's significantly cheaper compared to Slack. Struct charges 9.97 per month. And we only charge for AI usage, not number of users or threads or chats.
Base price comes with 200K tokens free, which is enough for most small orgs, if they're only using it to generate thread titles and summaries.
In fact, that's the average token usage by Typesense, one of our users. Apache Druid is around 400K tokens per month. 1K tokens cost 3 cents, so 200K tokens would cost $6 (on top of the base price). Both use Struct as a knowledge-base.
When we start enforcing monetization, we'd allow users to set a cap on monthly spend, so there're no surprises. Beyond the base price, it can be as cheap as you want.
I signed up to try it out and use it personally before deciding for the other team/company. I would really wish to retain org name to 5-characters. ;-)
Update: I can actually change the URL from inside Struct. It would still be nice to be able to choose that during the sign-up steps.