Project Overview
I am building an end-to-end encrypted kind of chat application that aims to give you a convenient method with which you can offer your contact information to the public but still communicate anonymously while maximizing privacy for all involved parties.
It can be used as an alternative to email and to messaging apps that require you to reveal your phone number.
See Features for details.
It's already functional and I have it running for myself, but visually it's not very sophisticated yet.
This project builds on the principle of "Can't be evil".
The project's working title is simply "Contact Form".
I want to use this page to post updates on the project's progress and allow you to follow along.
Discussion about features and other related topics is highly appreciated.A Log is at the bottom of the page.
Highlights
You can host it yourself and you can easily piggyback non-technical people to make use of the Contact Form themselves and spread the use of private communication.
Completely web-based and anonymous:
Access through browser with username/password.
The username/password combination makes a user's identity.
Users log in again to see your reply and to continue the conversation.
The front-end application leaves no trace on the device.
This is good in case your device ever gets compromised.
No cookies whatsoever are used, and neither keys nor messages are stored on the device.
The entire session lives in-memory.
Once the page is closed or refreshed, the session is gone immediately.
Entry points:
Each entry point has its own URL.
Create as many entry points as you like and decide which entry point you reveal to whom.
Delete entry points to quickly cut off spam or unwanted visitors.
Kind of like email aliases or throw-away addresses.
More is in the making.
See Planned Features for more.
Background
Contact forms are great because communication is encrypted through https.
Which means the encryption is available in every browser "for free" and users don't need any technical understanding.
However, common contact forms only work in one direction and follow-up communications are via email.
And email is terrible for privacy.
How do you establish a communication channel with people you met in a public place where everybody is listening?
Exchanging email addresses works but is not private.
Exchanging phone numbers may be too personal to start with.
Similar situation when you want to offer your public contact information like on a website or on a business card.
A contact form on your website is good because it uses SSL encryption but it is only one-way and you typically have to reply through email.
Features
Current
- entry points - Each entry point has its own URL. Use to separate visitors by e.g. topic and to quickly cut off unwanted visitors without nuking your entire network.
- piggyback other users - Create "tenants" for other people so they can have their own contact form but hosted on your instance.
- particularly good to onboard non-technical people and bring encrypted communication to them
- also good if someone doesn't want to maintain their own web server
- works via script on the server (not available in the GUI)
- sending files
- communication between tenant and instance owner
- embeddable via
iframe- basic styling options via query parameters
- optimizations to save bandwidth
Planned
(May contain unfinished ideas)
- instance-to-instance communication
- chat-style and email-style
- define required fields that visitors have to fill in before they can start a conversation (like an actual contact form)
- restrict login at admin entry point to admin
- more sophisticated styling options when embedding
- as admin/owner: filter conversations by entry point
- deletion of conversations (currently only possible to delete entire entry points)
- RSS/Atom feed for notifications
- chat client as browser extension
- make pretty
Technical stuff
- NodeJS on the server
- VueJS on the client
- Encryption through sodium-plus library (based on libsodium) on both server and client
Source code
Available on GitHub at https://github.com/IgiPikek/contact-form.
Log
2023-10-29- Added basic responsive UI layout to admin view.2023-10-28- 'Refresh messages' now uses the opposite party's last message as reference. This avoids missing messages that arrive between the last refresh and your subsequent outgoing message.2023-07-06- Added some feedback messages to UI.2023-05-23- Embedded mode via query param. Define styling via query params when embedding iniframe.2023-05-14- Large messages are no longer downloaded immediately. Instead, the user has to explicitly press a button to download.2023-04-27- Published code on GitHub2023-04-18- Fixed a bug that prevented the refreshing of the conversation after sending a message.2023-04-11- Fixed bug from2023-04-042023-04-04- Identified a bug that prevents first-time visitors from starting a conversation. Fix gets top priority.2023-04-02- Working on bandwidth optimization. Don't download large files/messages immediately but display placeholder with file size and download button.

