About
okay doing - will be fine
let's make web great again
ComiCo - opensource client and server for simple forum / ad board. It is designed for easy communication. The main features are fast work with a poor Internet connection (and without), simple and user-friendly interface, compliance with modern standards. It also tries to solve the "fat web" problem by limiting external dependencies and throwing out "unnecessary" functionality.
The plans to change the architecture from client-server to the federated for great justice more freedom of information and counter-censorship.
At the moment, the project is in the prototype stage, which implements only the basic functionality. You can help by sending an error report or your opinion on how this application can be.
Features
Server
- Simple json rest api, writen in golang
- Fast embedded, in-memory storage
- ACME autocert
- JWT for authentication
- All needed headers for security (CORS, CSP, HSTS, etc)
- Simple anti-bruteforce
- Static file server (no nginx, apache, etc needed)
- Images optimization
- Flexible data validation and access rights
- Indicates when the data type is last modified
- 5 minutes installation
➜ cat /proc/cpuinfo | grep name model username: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
➜ wrk -t2 -c500 -d60s http://localhost:9001/pub/mtimes Running 1m test @ http://localhost:9001/pub/mtimes 2 threads and 500 connections Thread Stats Avg Stdev Max +/- Stdev Latency 20.74ms 16.68ms 236.16ms 72.69% Req/Sec 13.19k 627.43 15.62k 73.58% 1575522 requests in 1.00m, 449.26MB read Requests/sec: 26231.85 Transfer/sec: 7.48MB
➜ wrk -t2 -c500 -d60s http://localhost:9001/pub/goods Running 1m test @ http://localhost:9001/pub/goods 2 threads and 500 connections Thread Stats Avg Stdev Max +/- Stdev Latency 61.79ms 65.96ms 643.73ms 86.48% Req/Sec 5.26k 705.24 7.88k 70.31% 628215 requests in 1.00m, 8.44GB read Requests/sec: 10454.44 Transfer/sec: 143.89MB
Client
- No external dependencies, 30 KB gzip js/css/html
- Caches all data in localStorage, works offline
- Images and assets in cacheStorage
- Reloading the page does not affect
- Clean and simple HTML and JS, maximum reuse
- Mobile-friendly, PageSpeed 100/100
- Accessibility ready
- Very simple user interface
- Commenting everything
- Subscribe and ignore by record type or username
- Image upload or use external
- Up your post once a day, it will expire in a month
- Custom key-value data table for goods and users
- Flexible search and filters
- Notification of new comments to your
- Intuitive page URL and title
- Full-featured keyboard navigation
top
Known bugs
Not all features are fully implemented :) For older browsers, there are no js-polyfills and css prefixes. Not a beautiful code style. Not perfect design and user interface. For large data and / or frequent changes, client may consume a large amount of resources.
top
Roadmap
ComiCo project
More parameters for data request: time range, selection by user, specific id. Log transaction (creating, editing, deleting articles) and push notification of the client about it via server sent event. The client stores data on the indexedDB and loads only the changed items from the server.
Bazaar project
Federated network. Servers can merge, displaying data from "friendly". Each federation has its own client, with its own design. Moderation and user management for each server is different.
Echo project
Decentralized network. Each client is also a server. The data exchange protocol contains information about access rights, data structure, source code for processing and display. Instances can subscribe (keep a copy and wait for change notifications), read, suggest changes for data types of other instances (if this is allowed for this type).
...
Profit!
top
Screenshots
top
Install
# yum install golang nodejs ImageMagick # useradd -d /var/www/comico -U comico # passwd comico # su -l comico $ mkdir ~/go/src $ cd ~/go/src $ git clone https://github.com/ddidwyll/comico.git $ cd comico $ cp other/config.json.example ./config.json $ vi ./config.json $ go get $ go build $ cd client $ npm i $ npm run build $ exit # cp /var/www/comico/go/src/comico/other/comico.service /etc/systemd/system/ # systemctl daemon-reload # systemctl start comico
If port in config.json == "80" || "443" comico use ACME cert
If no config.json presents check http://localhost:8080
For Ubuntu, Debian, Elementary, Mint use apt. Etc
After install login admin|admin and enjoy :)
top
Help
Today I need review and feedback.
top
Links
Svelte | github.com/sveltejs/svelte |
Echo | github.com/labstack/echo |
BuntDB | github.com/tidwall/buntdb |
Source | github.com/ddidwyll/comico |
Habr (ru) | habr.com/ru/post/435908 |
Author | ddidwyll@gmail.com |