Compare commits
557 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9b7065a88e | ||
|
3c9930a6de | ||
|
da63685e90 | ||
|
4fc547f47c | ||
|
4e6af56d00 | ||
|
5d0f6638b1 | ||
|
7468e72f0a | ||
|
b677aa1fa4 | ||
|
3c12cc6065 | ||
|
d0e69246cc | ||
|
38a637e5cb | ||
|
5249ffda99 | ||
|
ae9a72b8d6 | ||
|
6c4f0f1181 | ||
|
1c93ad161f | ||
|
60f20748be | ||
|
8cc71831f8 | ||
|
26198f4794 | ||
|
aab6293c49 | ||
|
2ef440c4ee | ||
|
39248f60e5 | ||
|
ad58f41502 | ||
|
fa2905e82c | ||
|
29ba7cbc55 | ||
|
43aa246605 | ||
|
367df58b52 | ||
|
cf89dd48e5 | ||
|
7b3c490858 | ||
|
78792e3edf | ||
|
2abfc42148 | ||
|
b12f7e2883 | ||
|
09d4f03c54 | ||
|
42e996920f | ||
|
cf1823e298 | ||
|
e2822f2db6 | ||
|
8c43bd18be | ||
|
1dd09a1632 | ||
|
732553c3ee | ||
|
5f57f4b0f6 | ||
|
0b483272d9 | ||
|
93d7d9aeb5 | ||
|
dcc1ad31d0 | ||
|
078ca0f623 | ||
|
0eb3cf023c | ||
|
2253784dd7 | ||
|
50eed2cbe5 | ||
|
869b3be540 | ||
|
b025061682 | ||
|
63611f2a6e | ||
|
2b3052ac3f | ||
|
69755d1fea | ||
|
c992259541 | ||
|
d71862b23e | ||
|
651fdbe50f | ||
|
25b7286a3a | ||
|
88f31578de | ||
|
95a9b06135 | ||
|
f6e70e983e | ||
|
5735a2372e | ||
|
8f0c88c277 | ||
|
688f63064c | ||
|
51b8b9efae | ||
|
b49b22ed68 | ||
|
0ad996969c | ||
|
2637306211 | ||
|
f074bfe5b9 | ||
|
3141ba09e9 | ||
|
3ad8034b73 | ||
|
1554600a27 | ||
|
c8a743558f | ||
|
bf1fed34b6 | ||
|
f2cc1d79c0 | ||
|
d3b47a0ad6 | ||
|
0f57cb00bd | ||
|
76512cfe88 | ||
|
f7001136e6 | ||
|
1e3290cedc | ||
|
96b470d880 | ||
|
27acf58e1f | ||
|
141106f844 | ||
|
f9538c0927 | ||
|
8c609d2f9d | ||
|
2592c07e00 | ||
|
8d473b342b | ||
|
b192e8a939 | ||
|
fcbce7c58a | ||
|
b4ebb20897 | ||
|
b5b8c8e2cb | ||
|
b2d8332b7b | ||
|
3e4233b8df | ||
|
b9cb687cf1 | ||
|
2e6b892791 | ||
|
3b35640e68 | ||
|
bb043e7520 | ||
|
03d83b6be4 | ||
|
0430403e01 | ||
|
15ab5cb2e9 | ||
|
d4b1eb2100 | ||
|
c006ee22ec | ||
|
26ef4b6800 | ||
|
054284a6ed | ||
|
8a93d123ad | ||
|
b61f3da878 | ||
|
094be15b05 | ||
|
66c4d5255c | ||
|
5663e2761d | ||
|
fabbc79364 | ||
|
cd801a7679 | ||
|
3318048ce3 | ||
|
3e2b70c5ed | ||
|
0f51f7b5d4 | ||
|
2804de9972 | ||
|
f83cf8d25e | ||
|
8a9216a934 | ||
|
5bd9d80258 | ||
|
459732df1d | ||
|
17dfdeeb0b | ||
|
901c615459 | ||
|
2b61d25726 | ||
|
f469aff9f6 | ||
|
df8d2806e6 | ||
|
0001f6c8c9 | ||
|
51306e92c4 | ||
|
53bfc32d4f | ||
|
ff8d0955d6 | ||
|
6c4853822e | ||
|
03ba44a84b | ||
|
0960c00c72 | ||
|
9c83347162 | ||
|
047f5b364f | ||
|
caf46172c8 | ||
|
a1041fb225 | ||
|
97f375472e | ||
|
0d9fd2724e | ||
|
5336d19608 | ||
|
810009f7aa | ||
|
e5fe393b43 | ||
|
19248eee7c | ||
|
f5461cf870 | ||
|
1d271d2eb8 | ||
|
0ac7dffd29 | ||
|
169bf5906a | ||
|
73e70b19d6 | ||
|
20d05ca258 | ||
|
bbcb973d04 | ||
|
380bc0d8a4 | ||
|
948009558c | ||
|
b3ad138fa3 | ||
|
aab471eed7 | ||
|
0bcb289833 | ||
|
3b7de54be8 | ||
|
8e6f1087e4 | ||
|
55e054abb5 | ||
|
d38d60119b | ||
|
89217cd441 | ||
|
66729cfc60 | ||
|
afb7632edf | ||
|
5b2e42bc6f | ||
|
04b00e02be | ||
|
f5b43fef53 | ||
|
71c65efa20 | ||
|
ed53e4915f | ||
|
af3f1f070a | ||
|
3fac7afe3d | ||
|
726821e29e | ||
|
d00ab3ee8f | ||
|
c881bc9498 | ||
|
7ec199d992 | ||
|
d588347ebc | ||
|
f05e86e5ac | ||
|
f05c501e6e | ||
|
1155258f66 | ||
|
c1d0c00856 | ||
|
af59af5fe1 | ||
|
325755add9 | ||
|
8382db9131 | ||
|
5d94ac5ba8 | ||
|
e6fe674e05 | ||
|
76b1bccd8e | ||
|
96629ff26c | ||
|
4ea24efd21 | ||
|
c6fb9ac39e | ||
|
915e5bdf02 | ||
|
4ef3fea0dd | ||
|
db144fccf2 | ||
|
8aadf66933 | ||
|
c1ad012964 | ||
|
bb8799b55f | ||
|
7f5a5dea52 | ||
|
91cd3c2457 | ||
|
4188a09b63 | ||
|
b47a4d88cf | ||
|
4462c0d162 | ||
|
59346cf97d | ||
|
2a9f4a7b5f | ||
|
21ed521559 | ||
|
acc57fe67a | ||
|
9d08d387ab | ||
|
17e1e5ad57 | ||
|
2ce6bf4e00 | ||
|
665506867b | ||
|
9e8a3a603e | ||
|
1f2b683d16 | ||
|
11ddfff957 | ||
|
8113f01a4d | ||
|
02c5f0792b | ||
|
8815ebe7bd | ||
|
9e67d2027b | ||
|
10ad2fd0ae | ||
|
d7046fb531 | ||
|
26095d2d20 | ||
|
6389fcc069 | ||
|
d86116580c | ||
|
673e88cc42 | ||
|
36703e7114 | ||
|
4d0e1a8c2e | ||
|
c419b44433 | ||
|
948aeced0a | ||
|
ffede893d8 | ||
|
62c48e6a8a | ||
|
a576c535e7 | ||
|
9b12297a00 | ||
|
3d6699381a | ||
|
fa9c08222d | ||
|
8b15004b48 | ||
|
fc99b24d5d | ||
|
b400592d03 | ||
|
7f8dc1a6be | ||
|
58ba4857f9 | ||
|
67f7caa378 | ||
|
b0fd1a2cd6 | ||
|
2c416d5150 | ||
|
7e39f05491 | ||
|
f03ca2dbe0 | ||
|
48baa779fb | ||
|
9af0fc744f | ||
|
0b4e7da468 | ||
|
e83bd155c4 | ||
|
721b4d35b2 | ||
|
90e4ee62cb | ||
|
8447dcd6ee | ||
|
a43a869197 | ||
|
06618102c9 | ||
|
3629f30029 | ||
|
71d6598556 | ||
|
2541417662 | ||
|
4ae70543db | ||
|
5e527a65fd | ||
|
bbb6d7593e | ||
|
2e418db65d | ||
|
2473503a30 | ||
|
ee3e528337 | ||
|
5db44ebaff | ||
|
d245081ecf | ||
|
75db9a732a | ||
|
330b98f835 | ||
|
18127e2442 | ||
|
f2d57d6d5e | ||
|
bed02f2750 | ||
|
82c8221f2e | ||
|
606b8c4122 | ||
|
4288aa9cc5 | ||
|
1f7ad6c4bd | ||
|
d81c723801 | ||
|
60761d3d5d | ||
|
a24272db84 | ||
|
ff66e8457d | ||
|
1cd729c820 | ||
|
0af52e5178 | ||
|
ebecfe9b0c | ||
|
4ca114806c | ||
|
240be0db76 | ||
|
24d73f7caa | ||
|
104c61b1cf | ||
|
2dd07e55f3 | ||
|
310c6bbb2b | ||
|
19f01c57c5 | ||
|
a6970986d1 | ||
|
696dace1bb | ||
|
17f6eea3e8 | ||
|
253de78c82 | ||
|
a53b752902 | ||
|
a7ad04f39f | ||
|
1f65483e1a | ||
|
21b92e7a37 | ||
|
f03839661c | ||
|
9a8df8639a | ||
|
01493582db | ||
|
20211edc58 | ||
|
680c5dedfa | ||
|
6c70622eb4 | ||
|
e7817bb696 | ||
|
55efa14d61 | ||
|
7192f657a0 | ||
|
dc57dc1000 | ||
|
98491d3ab3 | ||
|
c2c9679eb2 | ||
|
810c188192 | ||
|
d74e05b86d | ||
|
10f5207fde | ||
|
3798bf259c | ||
|
f3946abf68 | ||
|
4fd4207761 | ||
|
347f263c15 | ||
|
08c2e0bd92 | ||
|
c689ecd535 | ||
|
94f39964c8 | ||
|
cacb00c121 | ||
|
bb3ff450e4 | ||
|
5ee942ef75 | ||
|
a6f5aabd3e | ||
|
3200616bd2 | ||
|
2eb5fdded1 | ||
|
f33ddfa134 | ||
|
1ba04589b4 | ||
|
65679e8e96 | ||
|
271db64e0e | ||
|
29fcfe8119 | ||
|
a689a40a6d | ||
|
bba5a1c6de | ||
|
30cabccf6c | ||
|
993434b96c | ||
|
da5b12d0e7 | ||
|
607111071b | ||
|
fbe13f35c2 | ||
|
d6c0efcb0d | ||
|
d8e5496ed7 | ||
|
a9d005e287 | ||
|
60f005d4d3 | ||
|
28bb15a248 | ||
|
c4f33da48a | ||
|
25e469a639 | ||
|
4c386fac8e | ||
|
76773105ed | ||
|
498e14346f | ||
|
3d83550921 | ||
|
2b925d7771 | ||
|
016a43ff89 | ||
|
b809e6f750 | ||
|
91a249fbb9 | ||
|
f18bd116fd | ||
|
560263606b | ||
|
00f55bba56 | ||
|
8071db8f35 | ||
|
9f1b502d5b | ||
|
76246ac6eb | ||
|
f5e9b5de61 | ||
|
61d2660f88 | ||
|
a4deb48bba | ||
|
111e295f9c | ||
|
0d2e35ae8e | ||
|
48f5f53f22 | ||
|
fdf8086afa | ||
|
2f723f3759 | ||
|
97ec0067fc | ||
|
50c1e07431 | ||
|
f1ec3f30e0 | ||
|
2eb1f4ffb4 | ||
|
3f84ca6429 | ||
|
9cfa108a0c | ||
|
893a0d97de | ||
|
33c6599d05 | ||
|
b86aa94d25 | ||
|
c57675a19f | ||
|
cee56ed505 | ||
|
78665a87bb | ||
|
15bd17dd5f | ||
|
d02130679b | ||
|
3e2ebe7f77 | ||
|
1294e80523 | ||
|
a23008d4ea | ||
|
b974d7465a | ||
|
59c17f1582 | ||
|
30f4a2423e | ||
|
5075ad7363 | ||
|
132b880127 | ||
|
8d7e88d12b | ||
|
fec1f9e2cf | ||
|
c4d675cb0e | ||
|
ae12bf4ffb | ||
|
96d077fd66 | ||
|
46dd40ed9c | ||
|
ffb44c1f5d | ||
|
65564c808a | ||
|
68edf63add | ||
|
43d7c4f5ec | ||
|
4c838361ff | ||
|
f0dc45fe10 | ||
|
9c3c50c0b7 | ||
|
7e2ec8a6cc | ||
|
602acde3f3 | ||
|
7330abb8f1 | ||
|
bfca12a170 | ||
|
4e0b47072a | ||
|
d2cec19b43 | ||
|
22eafd10ff | ||
|
c28e1ebb84 | ||
|
91cbe158be | ||
|
ab76125a9f | ||
|
14b03f263d | ||
|
405e6c2b76 | ||
|
c3c979ad72 | ||
|
fbfad8a3fd | ||
|
f26373e99c | ||
|
fd60909768 | ||
|
daf4732406 | ||
|
401e614ee9 | ||
|
35453fc678 | ||
|
fa2927d5ba | ||
|
408a16f018 | ||
|
8735eff6ba | ||
|
5b5db51ad3 | ||
|
76237d6d1e | ||
|
b3828891af | ||
|
7c9b811ca6 | ||
|
8c77245524 | ||
|
fce0f4e630 | ||
|
49c2aafaf4 | ||
|
7eb88452d1 | ||
|
35e1b55685 | ||
|
0ecce1da5f | ||
|
d5b779a04e | ||
|
2711b579ba | ||
|
72d43ca294 | ||
|
10925079bf | ||
|
4e380a8e05 | ||
|
5f7483c17b | ||
|
1e6a8e0e79 | ||
|
59035760de | ||
|
dcdee2413e | ||
|
7a62d0ec82 | ||
|
376420517f | ||
|
e1351459fb | ||
|
8c1eb824e7 | ||
|
04e4da7aa3 | ||
|
ef75799ed5 | ||
|
ac268d4a3d | ||
|
3b0677ff65 | ||
|
81a222a18f | ||
|
1c171d0372 | ||
|
57749610f8 | ||
|
9c4b2bfeb6 | ||
|
d0e8ef8be7 | ||
|
bc7f919ca3 | ||
|
f8373284bf | ||
|
9e6875a951 | ||
|
66c9710764 | ||
|
0d04c26b2a | ||
|
b1557bf204 | ||
|
3052d5e1b9 | ||
|
73adea60a3 | ||
|
fe916814ba | ||
|
82092bbe57 | ||
|
67221f3363 | ||
|
2c03abdeb3 | ||
|
32722bdc99 | ||
|
5c233a8ce4 | ||
|
7e77f30b9e | ||
|
3072e0dec7 | ||
|
84165a74d6 | ||
|
977916e61f | ||
|
3768593502 | ||
|
bcbdfeb963 | ||
|
e87a5b86fb | ||
|
894ac14a10 | ||
|
04ec4f5959 | ||
|
4343c5eb33 | ||
|
1870aa16af | ||
|
f4ad6c9a9f | ||
|
8491171b82 | ||
|
1d3f4caf55 | ||
|
55f8519ef7 | ||
|
41b72427c4 | ||
|
249a96936a | ||
|
f7fe2a4308 | ||
|
b81c55af41 | ||
|
d4e571e3fd | ||
|
6bd073fdf9 | ||
|
c7f993414b | ||
|
3787652777 | ||
|
622111e697 | ||
|
a0b07bfed8 | ||
|
68203bad52 | ||
|
6031ea3cc6 | ||
|
8d9c5a0e4c | ||
|
e496c75f47 | ||
|
acead8f30b | ||
|
6b60098ff3 | ||
|
e59f025e5a | ||
|
f2919bface | ||
|
25f5a55510 | ||
|
151773352f | ||
|
f3fc131138 | ||
|
b2f1316259 | ||
|
0de1616f77 | ||
|
221b36895c | ||
|
4406308139 | ||
|
4722d54e1f | ||
|
425f036721 | ||
|
e5616e5219 | ||
|
f45750627e | ||
|
82424a7217 | ||
|
c8408dfaf8 | ||
|
3dbdd793ab | ||
|
f09f2a28cf | ||
|
08eac2067f | ||
|
ec107d0d81 | ||
|
6bf949fc88 | ||
|
01ba153d33 | ||
|
32c2422290 | ||
|
ef7b71de60 | ||
|
f76470c860 | ||
|
244fcd5d56 | ||
|
b3222db1f7 | ||
|
e5a34beceb | ||
|
9731cc8f55 | ||
|
ede54b1762 | ||
|
f795a32eae | ||
|
af8eccd688 | ||
|
91f0b0d3ac | ||
|
092e8ee8a0 | ||
|
cd2501dc4b | ||
|
cee9612fc0 | ||
|
d28f9e08bf | ||
|
ed19501b6e | ||
|
e54794986f | ||
|
ead73db759 | ||
|
e918f3adf8 | ||
|
36330038c1 | ||
|
7fe8d41919 | ||
|
68d4c3ad4d | ||
|
cbfc236807 | ||
|
75519d036d | ||
|
5bb3c851ca | ||
|
a9b1876ee6 | ||
|
1458df5481 | ||
|
f42fabf08d | ||
|
4b52c477f8 | ||
|
766bc52965 | ||
|
fabad03bab | ||
|
d9beda5be9 | ||
|
ef0f1a2997 | ||
|
725eb9bac1 | ||
|
50af37f2c3 | ||
|
ce0c1ad75f | ||
|
b860494ca9 | ||
|
11fdcf621f | ||
|
0cd14d8bba | ||
|
1144bb3765 | ||
|
0d6eddc88b | ||
|
a737e7dc9a | ||
|
c42f39a135 | ||
|
2d7bba14c0 | ||
|
855096d0ee | ||
|
42fedce27a | ||
|
03ebeaa7ad | ||
|
627c85ed48 |
@ -1,51 +1,52 @@
|
||||
# Databag Design Guidelines & Resources
|
||||
# Databag UI Redesign
|
||||
|
||||
A collection of design contribution guidelines and resources for our Databag product.
|
||||
|
||||
Here is the complete redesign of the UI for Databag.
|
||||
I have worked closely with @balzack and we feel it's in a pretty good state with lots of work ahead.
|
||||
|
||||
> **All participating designers are highly encouraged to shape and evolve these guidelines!**
|
||||
I kept the illustrations already suggested by the community and also kept the green hues of the current design.
|
||||
|
||||
## Welcome
|
||||
I applied standard design practices in font sizes, spacing and icons.
|
||||
The font selected is [Inter](https://fonts.google.com/specimen/Inter) and for icons I used [Phosphor Icons](https://phosphoricons.com).
|
||||
|
||||
Databag is a product targeted for the decentralized web community. It is a federeated messenger that gives people back their privacy and control of their data.
|
||||
### _**The current Figma file is here**_ -->
|
||||
[Databag.fig.zip](https://github.com/user-attachments/files/19713647/Databag.fig.zip)
|
||||
|
||||
## How to contribute design
|
||||
**Still missing:**
|
||||
- Dark Mode
|
||||
- Animations
|
||||
- Overall Branding (if seen necessary)
|
||||
|
||||
1. Check out open [issues](https://github.com/balzack/databag/issues) here on GitHub (we label them with `design: required`)
|
||||
2. Feel free to open an issue on your own if you find something you would like to contribute to the project and use the `design: idea` label for it.
|
||||
3. There are no existing figma files yet, for now create new ones and share them publicly
|
||||
4. Add your contributions to an issue and we promise we will review your contribution carefully and foster discussions
|
||||
|
||||
**We encourage you to:**
|
||||
|
||||
- Get in touch with the team by starting a discussion on [GitHub](https://github.com/balzack/databag/discussions).
|
||||
### **Screenshots:**
|
||||
### **Mobile Proposed Design**
|
||||
|
||||
## Target audience
|
||||
|
||||
The initial users are typically very technical, but hopefully this product will be embedded into consumer electronics and reach a much less technical audience. The design may benefit by exposing some technical attributes. For example, with a self-hosted product the users my be interested in knowing where their data actually lives.
|
||||
|
||||
## Design relevant materials
|
||||
|
||||
Here is a list of design relevant information and materials:
|
||||
<img width="1440" alt="Mobile" src="https://github.com/user-attachments/assets/78be3ac6-5f55-4b9e-a625-e758145406bc" />
|
||||
|
||||
### Fonts
|
||||
|
||||
Currently we're using Roboto everywhere.
|
||||
|
||||
### Colors
|
||||
### **Desktop Proposed Design**
|
||||
|
||||
We're using shades of green deliberately staying away from the corporate blue. The current background color is (#8fbea7) with the primary button color (#448866).
|
||||
|
||||
### Logos
|
||||
|
||||
We don't really have a logo yet, and are currently just using a scaled image from the app as the [icon](https://github.com/balzack/databag/blob/main/doc/icon.png)
|
||||
<img width="1440" alt="Desktop" src="https://github.com/user-attachments/assets/89aaa25a-a0c3-4583-8f04-29bbc43eef9a" />
|
||||
|
||||
|
||||
|
||||
### **Style Guide**
|
||||
|
||||
|
||||
|
||||
<img width="1440" alt="Styleguide" src="https://github.com/user-attachments/assets/c5402ab4-a0fe-4594-a34f-498af4494def" />
|
||||
|
||||
|
||||
_*There are some more screens in the figma file_
|
||||
|
||||
### Design Files, Screenshots, etc
|
||||
|
||||
We don't have any design files yet. Initially you can reference screenshots for the [browser app](https://github.com/balzack/databag/blob/main/doc/browser.png) and [mobile app](https://github.com/balzack/databag/blob/main/doc/mobile.png)
|
||||
|
||||
## License
|
||||
|
||||
All design work is licensed under the
|
||||
[Apache-2.0](https://github.com/balzack/databag/blob/main/LICENSE)
|
||||
|
||||
[(Back to top)](#-table-of-contents)
|
||||
|
BIN
.design/design-assets/Databag.fig.zip
Normal file
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/AddressBook.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Admin Login.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Admin Settings.png
Normal file
After Width: | Height: | Size: 258 KiB |
After Width: | Height: | Size: 361 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Blocked Contacts.png
Normal file
After Width: | Height: | Size: 191 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Blocked Messages.png
Normal file
After Width: | Height: | Size: 221 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Blocked Topics.png
Normal file
After Width: | Height: | Size: 253 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Chat Settings.png
Normal file
After Width: | Height: | Size: 644 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Contact List.png
Normal file
After Width: | Height: | Size: 428 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Conversation Empty.png
Normal file
After Width: | Height: | Size: 523 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Conversation.png
Normal file
After Width: | Height: | Size: 756 KiB |
After Width: | Height: | Size: 113 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Create Account.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Empty Contact List.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Login.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/New Conversation.png
Normal file
After Width: | Height: | Size: 451 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Onboarding.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Profile.png
Normal file
After Width: | Height: | Size: 994 KiB |
BIN
.design/design-assets/SCREENSHOTS/DESKTOP/Settings.png
Normal file
After Width: | Height: | Size: 303 KiB |
BIN
.design/design-assets/SCREENSHOTS/Desktop.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Add Account Pop Up.png
Normal file
After Width: | Height: | Size: 279 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Adimn Settings.png
Normal file
After Width: | Height: | Size: 209 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Admin Login.png
Normal file
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 739 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Block Pop Up.png
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Blocked Contacts.png
Normal file
After Width: | Height: | Size: 236 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Blocked Messages.png
Normal file
After Width: | Height: | Size: 342 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Blocked Topics.png
Normal file
After Width: | Height: | Size: 432 KiB |
After Width: | Height: | Size: 294 KiB |
After Width: | Height: | Size: 319 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Chat Settings.png
Normal file
After Width: | Height: | Size: 451 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Contact List.png
Normal file
After Width: | Height: | Size: 839 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Conversation Empty.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Conversation List.png
Normal file
After Width: | Height: | Size: 1020 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Conversation.png
Normal file
After Width: | Height: | Size: 721 KiB |
After Width: | Height: | Size: 66 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Create Account.png
Normal file
After Width: | Height: | Size: 137 KiB |
After Width: | Height: | Size: 185 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Delete Account.png
Normal file
After Width: | Height: | Size: 185 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Delete Contact.png
Normal file
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 190 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Empty Contact List.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Login.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Logout Pop Up.png
Normal file
After Width: | Height: | Size: 240 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Mute Pop Up.png
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/New Conversation.png
Normal file
After Width: | Height: | Size: 797 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Onboarding.png
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Profile.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 284 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Settings.png
Normal file
After Width: | Height: | Size: 203 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Unblock Pop Up-1.png
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Unblock Pop Up-2.png
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Unblock Pop Up.png
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
.design/design-assets/SCREENSHOTS/MOBILE/Video screen.png
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
.design/design-assets/SCREENSHOTS/Mobile.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide.png
Normal file
After Width: | Height: | Size: 406 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 1.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 10.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 3.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 4.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 5.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 6.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 7.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 8.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
.design/design-assets/SCREENSHOTS/Styleguide/Page 9.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
.design/design-assets/SCREENSHOTS/databag-d.png
Normal file
After Width: | Height: | Size: 4.5 MiB |
BIN
.design/design-assets/SCREENSHOTS/databag-m.png
Normal file
After Width: | Height: | Size: 6.3 MiB |
52
.design/design-assets/design.md
Normal file
@ -0,0 +1,52 @@
|
||||
# Databag UI Redesign
|
||||
|
||||
|
||||
Here is the complete redesign of the UI for Databag.
|
||||
I have worked closely with @balzack and we feel it's in a pretty good state with lots of work ahead.
|
||||
|
||||
I kept the illustrations already suggested by the community and also kept the green hues of the current design.
|
||||
|
||||
I applied standard design practices in font sizes, spacing and icons.
|
||||
The font selected is [Inter](https://fonts.google.com/specimen/Inter) and for icons I used [Phosphor Icons](https://phosphoricons.com).
|
||||
|
||||
### _**The current Figma file is here**_ -->
|
||||
[Databag.fig.zip](https://github.com/user-attachments/files/19713647/Databag.fig.zip)
|
||||
|
||||
**Still missing:**
|
||||
- Dark Mode
|
||||
- Animations
|
||||
- Overall Branding (if seen necessary)
|
||||
|
||||
|
||||
|
||||
### **Screenshots:**
|
||||
### **Mobile Proposed Design**
|
||||
|
||||
|
||||
|
||||
|
||||
<img width="1440" alt="Mobile" src="https://github.com/user-attachments/assets/78be3ac6-5f55-4b9e-a625-e758145406bc" />
|
||||
|
||||
|
||||
|
||||
### **Desktop Proposed Design**
|
||||
|
||||
|
||||
|
||||
<img width="1440" alt="Desktop" src="https://github.com/user-attachments/assets/89aaa25a-a0c3-4583-8f04-29bbc43eef9a" />
|
||||
|
||||
|
||||
|
||||
### **Style Guide**
|
||||
|
||||
|
||||
|
||||
<img width="1440" alt="Styleguide" src="https://github.com/user-attachments/assets/c5402ab4-a0fe-4594-a34f-498af4494def" />
|
||||
|
||||
|
||||
_*There are some more screens in the figma file_
|
||||
|
||||
|
||||
|
||||
|
||||
|
1
.dockerignore
Normal file
@ -0,0 +1 @@
|
||||
dev_database
|
22
.editorconfig
Normal file
@ -0,0 +1,22 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.{go,sh}]
|
||||
indent_style = tab
|
||||
|
||||
[{Makefile,Caddyfile}]
|
||||
indent_style = tab
|
||||
|
||||
[LICENSE]
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = false
|
23
.github/workflows/ci.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version: 20
|
||||
|
||||
- name: Build React
|
||||
run: |
|
||||
@ -28,7 +28,7 @@ jobs:
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: 1.17.5
|
||||
go-version: 1.18.10
|
||||
|
||||
- name: Build Go
|
||||
run: |
|
||||
@ -43,7 +43,7 @@ jobs:
|
||||
- name: Jest Setup
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
|
||||
- name: Jest ReactJs
|
||||
run: |
|
||||
@ -55,9 +55,22 @@ jobs:
|
||||
cd app/mobile
|
||||
yarn install
|
||||
yarn jest
|
||||
|
||||
|
||||
- name: Test SDK
|
||||
run: |
|
||||
cd app/sdk
|
||||
yarn install
|
||||
yarn build
|
||||
yarn test --silent
|
||||
|
||||
- name: Build WebApp
|
||||
run: |
|
||||
cd app/client/web
|
||||
yarn install
|
||||
yarn build
|
||||
|
||||
- name: Export
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: webapp
|
||||
path: net/web/build/*
|
||||
|
70
.github/workflows/openwrt.yml
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
name: OpenWrt
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "openwrt" ]
|
||||
pull_request:
|
||||
branches: [ "openwrt" ]
|
||||
|
||||
jobs:
|
||||
|
||||
CI:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
- name: Build React
|
||||
run: |
|
||||
npm install --global yarn
|
||||
cd web
|
||||
yarn install
|
||||
yarn build
|
||||
|
||||
- name: Bundle Webapp
|
||||
uses: a7ul/tar-action@v1.1.0
|
||||
id: compress_webapp
|
||||
with:
|
||||
command: c
|
||||
cwd: web
|
||||
files: |
|
||||
build
|
||||
outPath: webapp.tar.gz
|
||||
|
||||
- name: Bundle Server
|
||||
uses: a7ul/tar-action@v1.1.0
|
||||
id: compress_server
|
||||
with:
|
||||
command: c
|
||||
cwd: .
|
||||
files: |
|
||||
LICENSE
|
||||
databag.db
|
||||
go.mod
|
||||
go.sum
|
||||
main.go
|
||||
internal
|
||||
outPath: server.tar.gz
|
||||
|
||||
- name: Upload Webapp to Tag
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.PUB_TOKEN }}
|
||||
file: webapp.tar.gz
|
||||
tag: v1.1.11
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
|
||||
- name: Upload Server to Tag
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.PUB_TOKEN }}
|
||||
file: server.tar.gz
|
||||
tag: v1.1.11
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
|
1
.gitignore
vendored
@ -14,3 +14,4 @@
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
dev_database/
|
||||
|
45
Dockerfile
Normal file
@ -0,0 +1,45 @@
|
||||
FROM node:22-alpine AS node
|
||||
WORKDIR /app
|
||||
|
||||
# Download the node dependencies first before adding the rest for caching
|
||||
COPY ./net/web/package.json ./net/web/yarn.lock ./
|
||||
RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn \
|
||||
yarn --frozen-lockfile
|
||||
|
||||
COPY ./net/web/ ./
|
||||
RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn \
|
||||
yarn run build
|
||||
|
||||
FROM golang:alpine AS go
|
||||
EXPOSE 7000
|
||||
WORKDIR /app/databag
|
||||
|
||||
RUN apk add --no-cache build-base imagemagick sqlite ffmpeg curl
|
||||
|
||||
RUN mkdir -p /opt/databag
|
||||
RUN mkdir -p /var/lib/databag
|
||||
RUN mkdir -p /app/databag/net
|
||||
|
||||
COPY ./net/server /app/databag/net/server
|
||||
COPY ./net/transform /opt/databag/transform
|
||||
|
||||
WORKDIR /app/databag/net/server
|
||||
RUN --mount=type=cache,target=/go/pkg/mod \
|
||||
if [ -n "${DATABAG_GOARCH}" ]; then GOARCH=${DATABAG_GOARCH}; fi; \
|
||||
if [ -n "${DATABAG_GOOS}" ]; then GOOS=${DATABAG_GOOS}; fi; \
|
||||
go mod download
|
||||
|
||||
ARG DATABAG_GOARCH
|
||||
ARG DATABAG_GOOS
|
||||
|
||||
RUN --mount=type=cache,target=/go/pkg/mod \
|
||||
if [ -n "${DATABAG_GOARCH}" ]; then GOARCH=${DATABAG_GOARCH}; fi; \
|
||||
if [ -n "${DATABAG_GOOS}" ]; then GOOS=${DATABAG_GOOS}; fi; \
|
||||
CGO_ENABLED=1 go build -o databag .
|
||||
|
||||
COPY --from=node /app/build /app/databag/net/web/build
|
||||
|
||||
ENV DEV=0
|
||||
ENV ADMIN=password
|
||||
|
||||
ENTRYPOINT /app/databag/net/server/entrypoint.sh
|
20
Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
default:
|
||||
@grep '^[^#[:space:].].*:' Makefile
|
||||
|
||||
dev-start:
|
||||
docker compose -f docker-compose.dev.yml up -d
|
||||
dev-stop:
|
||||
docker compose -f docker-compose.dev.yml down
|
||||
|
||||
dev-restart-server:
|
||||
docker compose -f docker-compose.dev.yml restart net-server
|
||||
dev-restart-web:
|
||||
docker compose -f docker-compose.dev.yml restart net-web
|
||||
dev-restart-repeater:
|
||||
docker compose -f docker-compose.dev.yml restart net-repeater
|
||||
|
||||
prod-docker-start:
|
||||
docker compose up -d
|
||||
|
||||
prod-raw-build:
|
||||
./build.sh
|
101
README.md
@ -2,11 +2,15 @@
|
||||
[](https://contribute.design/balzack/databag)
|
||||
|
||||
<div align="center">
|
||||
<a href="#"><img src="/doc/icon.png" width="8%" style="border-radius:50%"></a>
|
||||
<a href="#"><img src="/doc/icon_v2.png" width="8%" style="border-radius:50%"></a>
|
||||
<h3 align="center">Databag</h3>
|
||||
<p align="center">Communication for the Decentralized Web</p>
|
||||
<p align="center">A federated messenger for self-hosting</p>
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<a href="/doc/design_overview.md">-> Design Overview <-</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
@ -19,20 +23,25 @@
|
||||
</p>
|
||||
<br>
|
||||
|
||||
Databag is a self-hosted messaging service. Notable features include:
|
||||
Databag is designed for efficiency, consuming minimal hosting resources. Notable features include:
|
||||
- Decentralized (direct communication between app and server node)
|
||||
- Federated (accounts on different nodes can communicate)
|
||||
- Public-Private key based identity (not bound to any blockchain or hosting domain)
|
||||
- End-to-End encryption (the hosting admin cannot view sealed topics, deafult unsealed)
|
||||
- End-to-End encryption (the hosting admin cannot view topics if sealed)
|
||||
- Audio and Video Calls (nat traversal requires separate relay server)
|
||||
- Topic based threads (messages organized by topic not contacts)
|
||||
- Unlimited participants (no limit on group thread members)
|
||||
- Lightweight (server can run on a raspberry pi zero v1.3)
|
||||
- Low latency (use of websockets for push events to avoid polling)
|
||||
- Unlimited accounts per node (host for your whole family)
|
||||
- Mobile alerts (push notifications on new contacts, messages, and calls)
|
||||
- Mobile alerts for new contacts, messages, and calls (supports UnifiedPush, FCM, APN)
|
||||
- Multi-Factor Authentication (integrates with TOTP apps)
|
||||
|
||||
<br>
|
||||
<p align="center">
|
||||
<a href="https://f-droid.org/en/packages/com.databag/">
|
||||
<img src="/doc/fdroid.png" width="18%">
|
||||
</a>
|
||||
<a href="https://apps.apple.com/us/app/databag/id6443741428">
|
||||
<img src="/doc/astore.png" width="18%">
|
||||
</a>
|
||||
@ -41,21 +50,37 @@ Databag is a self-hosted messaging service. Notable features include:
|
||||
</a>
|
||||
</p>
|
||||
|
||||
The app is available in the google and apple stores. You can also test out the project [here](https://databag.coredb.org/#/create), but don't post anything important as this server is regularly wiped. Feedback on the UI/UX, bugs or features is greatly appreciated.
|
||||
The app is available on fdroid as well as the google and apple stores. You can test out the project [here](https://databag.coredb.org/#/create), but don't post anything important as this server is regularly wiped.
|
||||
### Design
|
||||
Read the [Design Guidelines](https://github.com/balzack/databag/blob/main/.design/DESIGN.md). Link to [Figma File](https://www.figma.com/design/eVFi8bYlybn5KeyEePEaey/Databag---Github?node-id=1-6&t=Is2AiTfwktFO5aY0-1). Feel free to duplicate the Figma file to edit. Feedback on the UI/UX, bugs or features is greatly appreciated.
|
||||
|
||||
## Installation
|
||||
|
||||
To use databag, you will need a DNS name pointing to your node with a certificate. You can deploy a node manually, but you will have a much easier time using a container service. Containers for arm64 and amd64 are available [here](https://hub.docker.com/r/balzack/databag/tags).
|
||||
|
||||
### Docker Compose Command
|
||||
### Docker Compose
|
||||
|
||||
From the net/container sub directory:
|
||||
- sudo docker-compose -f compose.yaml -p databag up
|
||||
Launch with dockerhub container using docker compose:
|
||||
|
||||
#### Standard launch
|
||||
```shell
|
||||
# From the net/container sub directory:
|
||||
docker-compose -f compose.yaml -p databag up
|
||||
```
|
||||
|
||||
#### Launch with certbot https certificate
|
||||
```shell
|
||||
# FIRST: create a DNS entry in your DNS to point your desired subdomain to your host
|
||||
# SECOND: edit the net/container/docker-compose-swag.yml to include your domain name
|
||||
# THIRD: From the root of the project directory:
|
||||
mkdir -p ~/appdata
|
||||
docker-compose -f net/container/docker-compose-swag.yml -p databag up
|
||||
```
|
||||
|
||||
### Example with Portainer and Nginx Proxy Manager
|
||||
|
||||
From Portainer:
|
||||
- In the volume view, click add volumen:
|
||||
- In the volume view, click add volume:
|
||||
- Enter a name, then click 'Create the volume'
|
||||
- In the container view, click add container:
|
||||
- In the 'Image' field enter 'balzack/databag:latest'
|
||||
@ -73,6 +98,46 @@ From Nginx Proxy Manager:
|
||||
- Port '7000'
|
||||
- Request new SSL certificate
|
||||
|
||||
<details>
|
||||
<summary>Nginx Proxy config
|
||||
➡️ Click to expand ⬅️
|
||||
</summary>
|
||||
|
||||
```
|
||||
server {
|
||||
server_name your.site.tld;
|
||||
|
||||
location / {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://127.0.0.1:7000;
|
||||
client_max_body_size 0;
|
||||
proxy_max_temp_file_size 0;
|
||||
|
||||
}
|
||||
|
||||
listen 443 ssl http2;
|
||||
ssl_certificate /etc/letsencrypt/live/your.site.tld/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/your.site.tld/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
add_header Strict-Transport-Security "max-age=0";
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
if ($host = your.site.tld) {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
listen 80;
|
||||
server_name your.site.tld;
|
||||
return 404;
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
From Your Browser:
|
||||
- Enter your server address in the address bar [hostname.domain]
|
||||
- Click the cog icon in the top right
|
||||
@ -85,16 +150,24 @@ From Your Browser:
|
||||
|
||||
### Other installation options
|
||||
|
||||
Instructions for installing without a container on a Raspberry Pi Zero are [here](/doc/pizero.md).
|
||||
Install without a container on a Raspberry Pi Zero [here](/doc/pizero.md).
|
||||
|
||||
Instructions for installing without a container in AWS are [here](/doc/aws.md).
|
||||
Install without a container in AWS [here](/doc/aws.md).
|
||||
|
||||
Integrate Databag in an OpenWrt firmware [here](/doc/openwrt.md).
|
||||
|
||||
1-click installs in [CapRover](https://caprover.com/), [CasaOS](https://casaos.io), [Unraid](https://unraid.net/), [Runtipi](https://www.runtipi.io/), [Kubero](https://www.kubero.dev/), [Umbrel](https://umbrel.com/)
|
||||
|
||||
## Audio and Video Calls
|
||||
|
||||
Databag provides audio and video calling and relies on a STUN/TURN relay server for NAT traversal. Testing was done with both [cuturn](https://github.com/coturn/coturn) and [pion](https://github.com/pion/turn) and should work with any implementation. Instructions for installing a coturn server are provided [here](https://gabrieltanner.org/blog/turn-server/).
|
||||
Databag provides audio and video calling and relies on a STUN/TURN relay server for NAT traversal. Testing was done with both [coturn](https://github.com/coturn/coturn) and [cloudflare](https://developers.cloudflare.com/calls/turn/) and should work with any implementation. Instructions for installing a coturn server are provided [here](https://gabrieltanner.org/blog/turn-server/).
|
||||
|
||||
If you want to enable audio and video calls, you should setup your own relay server. For testing purposes you can however use the demo relay server configuration. In the admin configuration modal, set:
|
||||
If you want to enable audio and video calls, you should setup your own relay server or use the cloudflare [turn service](https://developers.cloudflare.com/calls/turn/). For testing purposes you can however use the demo relay server configuration. In the admin configuration modal, set:
|
||||
- Enable WebRTC Calls: -switch on-
|
||||
- WebRTC Server URL: turn:34.210.172.114:3478?transport=udp
|
||||
- WebRTC Username: user
|
||||
- WebRTC Password: pass
|
||||
|
||||
### Roadmap
|
||||
|
||||
Please add any missing features; [here](/doc/backlog.md) is the current backlog. Features are prioritized based on interest from the community.
|
||||
|
6
app/client/bot/nodemon.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"watch": ["src"],
|
||||
"ext": ".ts,.js",
|
||||
"ignore": [],
|
||||
"exec": "npx ts-node ./src/index.ts"
|
||||
}
|
37
app/client/bot/package.json
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "bot",
|
||||
"version": "0.0.1",
|
||||
"description": "Bot sample for Databag network",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "npm run build && node build/index.js",
|
||||
"start:dev": "npx nodemon",
|
||||
"build": "rimraf ./build && tsc",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/balzack/databag.git"
|
||||
},
|
||||
"keywords": [
|
||||
"bot",
|
||||
"databag",
|
||||
"decentralized"
|
||||
],
|
||||
"author": "Roland Osborne <roland.osborne@gmail.com>",
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/balzack/databag/issues"
|
||||
},
|
||||
"homepage": "https://github.com/balzack/databag#readme",
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.14.9",
|
||||
"nodemon": "^3.1.4",
|
||||
"rimraf": "^5.0.7",
|
||||
"ts-node": "^10.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"databag-client-sdk": "^0.0.18",
|
||||
"typescript": "^5.5.3"
|
||||
}
|
||||
}
|
9
app/client/bot/src/index.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { DatabagSDK } from 'databag-client-sdk';
|
||||
|
||||
const run = async () => {
|
||||
const sdk = new DatabagSDK(null);
|
||||
const bot = await sdk.automate();
|
||||
console.log(bot);
|
||||
}
|
||||
|
||||
run();
|
108
app/client/bot/tsconfig.json
Normal file
@ -0,0 +1,108 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
"lib": ["es6"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs", /* Specify what module code is generated. */
|
||||
"rootDir": "src", /* Specify the root folder within your source files. */
|
||||
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
"resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
"allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
"outDir": "build", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
1330
app/client/bot/yarn.lock
Normal file
2
app/client/mobile/.bundle/config
Normal file
@ -0,0 +1,2 @@
|
||||
BUNDLE_PATH: "vendor/bundle"
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: 1
|
4
app/client/mobile/.eslintrc.js
Normal file
@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: '@react-native',
|
||||
};
|
7
app/client/mobile/.prettierrc.js
Normal file
@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
arrowParens: 'avoid',
|
||||
bracketSameLine: true,
|
||||
bracketSpacing: false,
|
||||
singleQuote: true,
|
||||
trailingComma: 'all',
|
||||
};
|
1
app/client/mobile/.watchmanconfig
Normal file
@ -0,0 +1 @@
|
||||
{}
|
894
app/client/mobile/.yarn/releases/yarn-stable-temp.cjs
vendored
Executable file
154
app/client/mobile/App.tsx
Normal file
@ -0,0 +1,154 @@
|
||||
import React, { useState, useEffect, useRef } from 'react';
|
||||
import {Alert, Text, StatusBar} from 'react-native';
|
||||
import {AppContextProvider} from './src/context/AppContext';
|
||||
import {DisplayContextProvider} from './src/context/DisplayContext';
|
||||
import {NativeRouter} from 'react-router-native';
|
||||
import {Routes, Route} from 'react-router-dom';
|
||||
import {Root} from './src/root/Root';
|
||||
import {Access} from './src/access/Access';
|
||||
import {Service} from './src/service/Service';
|
||||
import {Session} from './src/session/Session';
|
||||
import ReceiveSharingIntent from 'react-native-receive-sharing-intent';
|
||||
|
||||
import {useColorScheme} from 'react-native';
|
||||
import {MD3LightTheme, MD3DarkTheme, PaperProvider} from 'react-native-paper';
|
||||
|
||||
const databagColors = {
|
||||
light: {
|
||||
name: 'light',
|
||||
primary: 'rgb(0, 108, 71)',
|
||||
onPrimary: 'rgb(255, 255, 255)',
|
||||
primaryContainer: 'rgb(142, 247, 193)',
|
||||
onPrimaryContainer: 'rgb(0, 33, 19)',
|
||||
secondary: 'rgb(121, 89, 0)',
|
||||
onSecondary: 'rgb(255, 255, 255)',
|
||||
secondaryContainer: 'rgb(255, 223, 160)',
|
||||
onSecondaryContainer: 'rgb(38, 26, 0)',
|
||||
tertiary: 'rgb(60, 100, 114)',
|
||||
onTertiary: 'rgb(255, 255, 255)',
|
||||
tertiaryContainer: 'rgb(192, 233, 250)',
|
||||
onTertiaryContainer: 'rgb(0, 31, 40)',
|
||||
error: 'rgb(186, 26, 26)',
|
||||
onError: 'rgb(255, 255, 255)',
|
||||
errorContainer: 'rgb(255, 218, 214)',
|
||||
onErrorContainer: 'rgb(65, 0, 2)',
|
||||
background: 'rgb(251, 253, 248)',
|
||||
onBackground: 'rgb(25, 28, 26)',
|
||||
surface: 'rgb(251, 253, 248)',
|
||||
onSurface: 'rgb(25, 28, 26)',
|
||||
surfaceVariant: 'rgb(220, 229, 220)',
|
||||
onSurfaceVariant: 'rgb(64, 73, 67)',
|
||||
outline: 'rgb(112, 121, 114)',
|
||||
outlineVariant: 'rgb(128, 128, 128)',
|
||||
shadow: 'rgb(0, 0, 0)',
|
||||
scrim: 'rgb(0, 0, 0)',
|
||||
inverseSurface: 'rgb(46, 49, 46)',
|
||||
inverseOnSurface: 'rgb(239, 241, 237)',
|
||||
inversePrimary: 'rgb(113, 218, 166)',
|
||||
elevation: {
|
||||
level0: 'rgb(255, 255, 255)',
|
||||
level1: 'rgb(240, 240, 240)',
|
||||
level2: 'rgb(232, 232, 232)',
|
||||
level3: 'rgb(216, 216, 216)',
|
||||
level4: 'rgb(208, 208, 208)',
|
||||
level5: 'rgb(200, 200, 200)',
|
||||
},
|
||||
surfaceDisabled: 'rgba(25, 28, 26, 0.12)',
|
||||
onSurfaceDisabled: 'rgba(25, 28, 26, 0.38)',
|
||||
backdrop: 'rgba(42, 50, 45, 0.4)',
|
||||
base: '#8fbea7',
|
||||
},
|
||||
dark: {
|
||||
name: 'dark',
|
||||
primary: 'rgb(9, 178, 99)',
|
||||
onPrimary: 'rgb(0, 56, 35)',
|
||||
primaryContainer: 'rgb(0, 82, 52)',
|
||||
onPrimaryContainer: 'rgb(142, 247, 193)',
|
||||
secondary: 'rgb(248, 189, 42)',
|
||||
onSecondary: 'rgb(64, 45, 0)',
|
||||
secondaryContainer: 'rgb(92, 67, 0)',
|
||||
onSecondaryContainer: 'rgb(255, 223, 160)',
|
||||
tertiary: 'rgb(164, 205, 221)',
|
||||
onTertiary: 'rgb(5, 53, 66)',
|
||||
tertiaryContainer: 'rgb(35, 76, 89)',
|
||||
onTertiaryContainer: 'rgb(192, 233, 250)',
|
||||
error: 'rgb(255, 180, 171)',
|
||||
onError: 'rgb(105, 0, 5)',
|
||||
errorContainer: 'rgb(147, 0, 10)',
|
||||
onErrorContainer: 'rgb(255, 180, 171)',
|
||||
background: 'rgb(25, 28, 26)',
|
||||
onBackground: 'rgb(225, 227, 223)',
|
||||
surface: 'rgb(25, 28, 26)',
|
||||
onSurface: 'rgb(225, 227, 223)',
|
||||
surfaceVariant: 'rgb(64, 73, 67)',
|
||||
onSurfaceVariant: 'rgb(192, 201, 193)',
|
||||
outline: 'rgb(138, 147, 140)',
|
||||
outlineVariant: 'rgb(64, 73, 67)',
|
||||
shadow: 'rgb(0, 0, 0)',
|
||||
scrim: 'rgb(0, 0, 0)',
|
||||
inverseSurface: 'rgb(225, 227, 223)',
|
||||
inverseOnSurface: 'rgb(46, 49, 46)',
|
||||
inversePrimary: 'rgb(0, 108, 71)',
|
||||
elevation: {
|
||||
level0: 'rgb(0, 0, 0)',
|
||||
level1: 'rgb(8, 8, 8)',
|
||||
level2: 'rgb(16, 16, 16)',
|
||||
level3: 'rgb(24, 24, 24)',
|
||||
level4: 'rgb(64, 64, 64)',
|
||||
level5: 'rgb(80, 80, 80)',
|
||||
},
|
||||
surfaceDisabled: 'rgba(225, 227, 223, 0.12)',
|
||||
onSurfaceDisabled: 'rgba(225, 227, 223, 0.38)',
|
||||
backdrop: 'rgba(42, 50, 45, 0.4)',
|
||||
base: 'rgb(0,0,0)',
|
||||
},
|
||||
};
|
||||
|
||||
function App(): React.JSX.Element {
|
||||
const colorScheme = useColorScheme();
|
||||
const [share, setShare] = useState(null as null | { filePath: string, mimeType: string });
|
||||
|
||||
useEffect(() => {
|
||||
ReceiveSharingIntent.getReceivedFiles(files => {
|
||||
if (files && files.length) {
|
||||
const { filePath, mimeType } = files[0];
|
||||
setShare({ filePath: filePath.startsWith('file') ? filePath : `file://${filePath}`, mimeType });
|
||||
}
|
||||
},
|
||||
(error) =>{
|
||||
console.log(error);
|
||||
},
|
||||
'databag'
|
||||
);
|
||||
return () => {ReceiveSharingIntent.clearReceivedFiles() }
|
||||
}, []);
|
||||
|
||||
const theme =
|
||||
colorScheme === 'dark'
|
||||
? {...MD3DarkTheme, colors: databagColors.dark}
|
||||
: {...MD3LightTheme, colors: databagColors.light};
|
||||
|
||||
barStyle = colorScheme === 'dark' ? 'light-content' : 'dark-content';
|
||||
backgroundColor = colorScheme === 'dark' ? databagColors.dark.elevation.level3 : databagColors.light.elevation.level3;
|
||||
|
||||
return (
|
||||
<AppContextProvider>
|
||||
<DisplayContextProvider>
|
||||
<PaperProvider theme={theme}>
|
||||
<NativeRouter>
|
||||
<StatusBar />
|
||||
<Root />
|
||||
<Routes>
|
||||
<Route path="/" element={<Text>EMPTY</Text>} />
|
||||
<Route path="/access" element={<Access />} />
|
||||
<Route path="/service" element={<Service />} />
|
||||
<Route path="/session" element={<Session share={share} />} />
|
||||
</Routes>
|
||||
</NativeRouter>
|
||||
</PaperProvider>
|
||||
</DisplayContextProvider>
|
||||
</AppContextProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
9
app/client/mobile/Gemfile
Normal file
@ -0,0 +1,9 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
|
||||
ruby ">= 2.6.10"
|
||||
|
||||
# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
|
||||
# bound in the template on Cocoapods with next React Native release.
|
||||
gem 'cocoapods', '>= 1.13', '< 1.15'
|
||||
gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
|
1
app/client/mobile/README.md
Normal file
@ -0,0 +1 @@
|
||||
|
17
app/client/mobile/__tests__/App.test.tsx
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* @format
|
||||
*/
|
||||
|
||||
import 'react-native';
|
||||
import React from 'react';
|
||||
import App from '../App';
|
||||
|
||||
// Note: import explicitly to use the types shipped with jest.
|
||||
import {it} from '@jest/globals';
|
||||
|
||||
// Note: test renderer must be required after react-native.
|
||||
import renderer from 'react-test-renderer';
|
||||
|
||||
it('renders correctly', () => {
|
||||
renderer.create(<App />);
|
||||
});
|
126
app/client/mobile/android/app/build.gradle
Normal file
@ -0,0 +1,126 @@
|
||||
apply plugin: "com.android.application"
|
||||
apply plugin: "org.jetbrains.kotlin.android"
|
||||
apply plugin: "com.facebook.react"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")
|
||||
|
||||
/**
|
||||
* This is the configuration block to customize your React Native Android app.
|
||||
* By default you don't need to apply any configuration, just uncomment the lines you need.
|
||||
*/
|
||||
react {
|
||||
/* Folders */
|
||||
// The root of your project, i.e. where "package.json" lives. Default is '../..'
|
||||
// root = file("../../")
|
||||
// The folder where the react-native NPM package is. Default is ../../node_modules/react-native
|
||||
// reactNativeDir = file("../../node_modules/react-native")
|
||||
// The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
|
||||
// codegenDir = file("../../node_modules/@react-native/codegen")
|
||||
// The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js
|
||||
// cliFile = file("../../node_modules/react-native/cli.js")
|
||||
|
||||
/* Variants */
|
||||
// The list of variants to that are debuggable. For those we're going to
|
||||
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
|
||||
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
|
||||
// debuggableVariants = ["liteDebug", "prodDebug"]
|
||||
|
||||
/* Bundling */
|
||||
// A list containing the node command and its flags. Default is just 'node'.
|
||||
// nodeExecutableAndArgs = ["node"]
|
||||
//
|
||||
// The command to run when bundling. By default is 'bundle'
|
||||
// bundleCommand = "ram-bundle"
|
||||
//
|
||||
// The path to the CLI configuration file. Default is empty.
|
||||
// bundleConfig = file(../rn-cli.config.js)
|
||||
//
|
||||
// The name of the generated asset file containing your JS bundle
|
||||
// bundleAssetName = "MyApplication.android.bundle"
|
||||
//
|
||||
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
|
||||
// entryFile = file("../js/MyApplication.android.js")
|
||||
//
|
||||
// A list of extra flags to pass to the 'bundle' commands.
|
||||
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
|
||||
// extraPackagerArgs = []
|
||||
|
||||
/* Hermes Commands */
|
||||
// The hermes compiler command to run. By default it is 'hermesc'
|
||||
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
|
||||
//
|
||||
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
|
||||
// hermesFlags = ["-O", "-output-source-map"]
|
||||
|
||||
/* Autolinking */
|
||||
autolinkLibrariesWithApp()
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
|
||||
*/
|
||||
def enableProguardInReleaseBuilds = false
|
||||
|
||||
/**
|
||||
* The preferred build flavor of JavaScriptCore (JSC)
|
||||
*
|
||||
* For example, to use the international variant, you can use:
|
||||
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
|
||||
*
|
||||
* The international variant includes ICU i18n library and necessary data
|
||||
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
|
||||
* give correct results when using with locales other than en-US. Note that
|
||||
* this variant is about 6MiB larger per architecture than default.
|
||||
*/
|
||||
def jscFlavor = 'org.webkit:android-jsc:+'
|
||||
|
||||
android {
|
||||
ndkVersion rootProject.ext.ndkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
compileSdk rootProject.ext.compileSdkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
namespace "com.databag"
|
||||
defaultConfig {
|
||||
applicationId "com.databag"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 1156
|
||||
versionName "1.5"
|
||||
}
|
||||
signingConfigs {
|
||||
release {
|
||||
storeFile file('balzack.keystore')
|
||||
storePassword 'balzack'
|
||||
keyAlias 'balzack'
|
||||
keyPassword 'balzack'
|
||||
}
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
// Caution! In production, you need to generate your own keystore file.
|
||||
// see https://reactnative.dev/docs/signed-apk-android.
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled enableProguardInReleaseBuilds
|
||||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// The version of react-native is set by the React Native Gradle Plugin
|
||||
implementation("com.facebook.react:react-android")
|
||||
implementation 'com.facebook.fresco:animated-gif:3.2.0'
|
||||
implementation 'com.facebook.fresco:animated-webp:3.2.0'
|
||||
implementation 'com.facebook.fresco:webpsupport:3.2.0'
|
||||
|
||||
if (hermesEnabled.toBoolean()) {
|
||||
implementation("com.facebook.react:hermes-android")
|
||||
} else {
|
||||
implementation jscFlavor
|
||||
}
|
||||
}
|
BIN
app/client/mobile/android/app/debug.keystore
Normal file
40
app/client/mobile/android/app/google-services.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "627079362503",
|
||||
"project_id": "databag-b46e0",
|
||||
"storage_bucket": "databag-b46e0.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:627079362503:android:6f3dfcb2c255787b4a8be2",
|
||||
"android_client_info": {
|
||||
"package_name": "com.databag"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "627079362503-8bk8o4hcv5rgdgrhik6nu9cjp3poisv7.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyAb92cvtSnaoQzhbDizg0dFskOtZFp_58M"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "627079362503-8bk8o4hcv5rgdgrhik6nu9cjp3poisv7.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
|
10
app/client/mobile/android/app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:targetApi="28"
|
||||
tools:ignore="GoogleAppIndexingWarning"/>
|
||||
</manifest>
|
78
app/client/mobile/android/app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,78 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-feature android:name="android.hardware.camera" />
|
||||
<uses-feature android:name="android.hardware.camera.autofocus" />
|
||||
<uses-feature android:name="android.hardware.audio.output" />
|
||||
<uses-feature android:name="android.hardware.microphone" />
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<application
|
||||
android:name=".MainApplication"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:allowBackup="false"
|
||||
android:theme="@style/AppTheme"
|
||||
android:supportsRtl="true"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="adjustNothing"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/*" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="image/*" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="image/*" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="video/*" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="video/*" />
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
@ -0,0 +1,37 @@
|
||||
package com.databag
|
||||
|
||||
import com.facebook.react.ReactActivity
|
||||
import com.facebook.react.ReactActivityDelegate
|
||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
|
||||
import com.facebook.react.defaults.DefaultReactActivityDelegate
|
||||
|
||||
import android.os.Bundle;
|
||||
import org.devio.rn.splashscreen.SplashScreen;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
class MainActivity : ReactActivity() {
|
||||
|
||||
/**
|
||||
* Returns the name of the main component registered from JavaScript. This is used to schedule
|
||||
* rendering of the component.
|
||||
*/
|
||||
override fun getMainComponentName(): String = "Databag"
|
||||
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
super.onNewIntent(intent);
|
||||
setIntent(intent);
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
SplashScreen.show(this)
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
|
||||
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
|
||||
*/
|
||||
override fun createReactActivityDelegate(): ReactActivityDelegate =
|
||||
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
|
||||
}
|