Explorar el Código

Initial commit

SVI hace 1 mes
padre
commit
a4fa34a184

+ 3 - 1
README.md

@@ -1,3 +1,5 @@
 # famplan
 # famplan
 
 
-Семейный календарь
+Семейный календарь.
+
+- [Рабочая документация](./main.md)

+ 66 - 0
Taskfile.yml

@@ -0,0 +1,66 @@
+# https://taskfile.dev
+
+version: '3'
+
+vars:
+  HELP: Для просмотра всех задач запустите 'task -a'
+
+dotenv: [.env]
+
+tasks:
+  default:
+    desc: "Вывод справки"
+    cmds:
+      - echo "{{.HELP}}"
+    silent: true
+  demo:
+    desc: "Запуск демо-проекта"
+    cmds:
+      - clear
+      - go fmt ./...
+      # - semgrep scan --config .semgrep.yml
+      - go build -race -o ./bin_dev/demo ./cmd/demo/main.go
+  mod:
+    desc: "Обновление зависимостей"
+    cmds:
+      - clear
+      - go mod tidy -compat=1.27.0
+      - go mod vendor
+      - go fmt ./...
+  test:
+    desc: "Запуск тестов"
+    cmds:
+      - clear
+      - go fmt ./...
+      - semgrep scan --config .semgrep.yml
+      - go test -race -shuffle=on -timeout=30s -coverprofile=./cover.out ./...
+      - go tool cover -func=./cover.out
+  lint:
+    desc: "Запуск всех линтеров"
+    cmds:
+      - clear
+      - go fmt ./...
+      - go vet ./...
+      # - go install honnef.co/go/tools/cmd/staticcheck@latest
+      # - staticcheck ./...
+      # - go install github.com/MakeNowJust/enumcase/cmd/enumcase@latest
+      # - enumcase ./...
+      # - go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
+      # - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2
+      - golangci-lint run ./...
+      # - go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
+      # - gocyclo -over 11 .
+      # - go install github.com/securego/gosec/cmd/gosec@latest
+      # - gosec ./...
+      # - pipx install semgrep
+      # - semgrep scan --config .semgrep.yml
+  fmt:
+    desc: "Форматирование кода"
+    cmds:
+      - clear
+      - go fmt ./...
+  lazy:
+    desc: "Запуск lazygit (с обновлением)"
+    cmds:
+      - go install github.com/jesseduffield/lazygit@latest
+      - lazygit

+ 37 - 0
docs/00_concept/00_concept.md

@@ -0,0 +1,37 @@
+# Концепция приложения
+
+## Социальная миссия проекта
+
+Приложение должно закрыть потребность частных семей (особенно многодетных или с большим количеством родственников) в индивидуальном и семейном календаре. При этом календарь должен быть доступен всем членам семьи, а не только родителям. Под членами семьи понимаются:
+
+- все ближайшие родственники;
+- родственники находящиеся в постоянном контакте с семьёй;
+- няни (воспитатели) приходящие в семью, где дети нуждаются в особом уходе.
+
+Таким образом календарь охватывает узкую группу, обеспечивает ей координацию, улучшает качество жизни и как побочные эффекты снимает тревожность, имеет полезный социальный эффеткы.
+
+В качестве социальной миссии:
+
+- в рамках семьи до 11 человек приложение бесплатно;
+- в рамках одной семьи связи до 7 семей приложение бесплатно.
+
+## Бизнес-задача
+
+Через закрытие социально-значимой потребности:
+
+- повысить узнаваемость собственого бренда;
+- через интеграцию рекламных предложений монетеизировать приложение для закрытия затрат на разработку и поддержание инфраструктуры;
+- создать платформу для дальнейшего развития и интеграции дополнительных мини-приложений (чаты, простые редакторы, связи с семьями-друзьями, возможно интеграция учебных дневников, кружковая работа, услуги репетиторов, парикмахеров, нянечек и др. сторонние платные услуги).
+- создать семент рынка с минимальной комиссией для увеличения потенциальной аудитори охвата.
+
+## Потенциальная ёмкость рынка
+
+В качестве потенциального рынка рассматривается всё СНГ. Количество граждан СНГ порядка 250 млн. человек. Из них семьи с 3 членами и хотя бы одним ребёнком до 23х лет около 30 млн (только в РФ 15 млн). Доля семей с детьми с особыми потребностями только в ОФ превышает 800 тыс. и за последние 10 лет этот уровень вырос на 30%. Доля семей с 3 детьми и более в РФ составляет до 2.0 млн. семей. В странах СНГ доля семей с 3 и более детей составляет от 30% до 50%.
+
+Таким образом общий охват аудитории в РФ потенциально может достигать 58 млн. человек, а в целом по СНГ -- 130 млн. человек.
+
+## Расчёт монетизации
+
+Условно возьмём охват рынка в РФ 5% (т.е.) примерно 3 млн. человек активных пользователей приложения. Показ одного рекламного объявления по цене 5 коп. При средних показах на человека 4 раза в сутки и пользовании приложением 6 дней в неделю будет выполнено 24 показа в неделю на человека, или 72 млн. показов в неделю. При указанной выше цене объявления -- за 1 год (56 недель) будет показано примерно 4 млрд рекламных сообщений на общую сумму примерно 200 млн. руб. в год.
+
+По всему СНГ (кроме РФ) можно получить ещё примерно 50 млн. руб. в год.

BIN
docs/00_concept/00_concept_struct.png


+ 21 - 0
docs/00_concept/00_concept_struct.uxf

@@ -0,0 +1,21 @@
+<diagram program="umletino" version="15.1"><zoom_level>10</zoom_level><element><id>UMLActor</id><coordinates><x>100</x><y>140</y><w>60</w><h>110</h></coordinates><panel_attributes>Child
+group=group-1</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLActor</id><coordinates><x>100</x><y>350</y><w>60</w><h>110</h></coordinates><panel_attributes>Parent
+group=group-1</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>80</x><y>90</y><w>110</w><h>360</h></coordinates><panel_attributes>Family
+--
+group=group-1</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLActor</id><coordinates><x>80</x><y>240</y><w>100</w><h>110</h></coordinates><panel_attributes>GrandParent
+group=group-1</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>250</x><y>90</y><w>80</w><h>100</h></coordinates><panel_attributes>PC/Mobile
+--</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>250</x><y>210</y><w>80</w><h>100</h></coordinates><panel_attributes>PC/Mobile
+--</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>250</x><y>340</y><w>80</w><h>110</h></coordinates><panel_attributes>PC/Mobile
+--</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLDeployment</id><coordinates><x>410</x><y>80</y><w>410</w><h>370</h></coordinates><panel_attributes>WebApp</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLGeneric</id><coordinates><x>440</x><y>220</y><w>140</w><h>80</h></coordinates><panel_attributes>symbol=component
+Transport
+Layer
+(HTTP, JSON-RPC)</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLGeneric</id><coordinates><x>530</x><y>130</y><w>140</w><h>80</h></coordinates><panel_attributes>symbol=component
+Bussines
+Layer</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLGeneric</id><coordinates><x>630</x><y>220</y><w>140</w><h>80</h></coordinates><panel_attributes>symbol=component
+Store
+Layer</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>140</x><y>130</y><w>130</w><h>70</h></coordinates><panel_attributes>lt=.&gt;</panel_attributes><additional_attributes>10;50;110;10</additional_attributes></element><element><id>Relation</id><coordinates><x>140</x><y>260</y><w>130</w><h>40</h></coordinates><panel_attributes>lt=.&gt;</panel_attributes><additional_attributes>10;20;110;10</additional_attributes></element><element><id>Relation</id><coordinates><x>140</x><y>380</y><w>130</w><h>30</h></coordinates><panel_attributes>lt=.&gt;</panel_attributes><additional_attributes>10;10;110;10</additional_attributes></element><element><id>Relation</id><coordinates><x>320</x><y>140</y><w>140</w><h>140</h></coordinates><panel_attributes>lt=.&gt;
+HTTPS</panel_attributes><additional_attributes>10;10;40;10;40;90;120;120</additional_attributes></element><element><id>Relation</id><coordinates><x>320</x><y>250</y><w>140</w><h>40</h></coordinates><panel_attributes>lt=.&gt;
+HTTPS</panel_attributes><additional_attributes>10;20;120;20</additional_attributes></element><element><id>Relation</id><coordinates><x>320</x><y>270</y><w>140</w><h>150</h></coordinates><panel_attributes>lt=.&gt;
+HTTPS</panel_attributes><additional_attributes>10;130;40;130;40;30;120;10</additional_attributes></element><element><id>Relation</id><coordinates><x>480</x><y>150</y><w>70</w><h>90</h></coordinates><panel_attributes>lt=-&gt;
+</panel_attributes><additional_attributes>10;70;10;20;50;10</additional_attributes></element><element><id>Relation</id><coordinates><x>660</x><y>150</y><w>80</w><h>90</h></coordinates><panel_attributes>lt=-&gt;
+</panel_attributes><additional_attributes>10;10;60;20;60;70</additional_attributes></element></diagram>

+ 10 - 0
docs/01_bussines/01_capabiletes.md

@@ -0,0 +1,10 @@
+# Бизнес-возможности
+
+Приложение должно обеспечивать бизнес-возможности (ниже без приоритетов):
+
+- создание семьи;
+- добавление участников семьи;
+- удаление учатсников семьи;
+- смена паролей родителями всем участников семьи и друг другу;
+- ведение индивидуальног окалендаря;
+- ведение семейного календаря.

+ 6 - 0
main.md

@@ -0,0 +1,6 @@
+# Семейный календарь
+
+## Архитектура
+
+- [Концепт](./docs/00_concept/00_concept.md)
+- [Бизнес-возможности](./docs/01_bussines/01_capabiletes.md)