diff --git a/BOT_SETUP.md b/BOT_SETUP.md
new file mode 100644
index 0000000..8b486e5
--- /dev/null
+++ b/BOT_SETUP.md
@@ -0,0 +1,77 @@
+# đ¤ ĐаŃŃŃОКка Telegram йОŃа Đ´ĐťŃ ĐžŃĐżŃавки иСОйŃаМониК
+
+## Đак ŃайОŃаоŃ:
+
+ĐОгда пОНŃСОваŃĐľĐťŃ Đ˝Đ°ĐśĐ¸ĐźĐ°ĐľŃ "ŃкаŃаŃŃ" в ĐżŃĐžŃПОŃŃŃико иСОйŃаМониК:
+1. ĐСОйŃаМонио ĐžŃĐżŃавНŃĐľŃŃŃ ŃĐľŃоС backend
+2. Backend иŃпОНŃСŃĐľŃ Telegram Bot API
+3. ФОŃĐž ĐżŃиŃ
ĐžĐ´Đ¸Ń Đ˛ ĐĐĄ Ń ĐąĐžŃОП пОНŃСОваŃоНŃ
+
+---
+
+## ĐаŃŃŃОКка на ŃĐľŃвоŃĐľ:
+
+### 1. УйодиŃĐľŃŃ ŃŃĐž TELEGRAM_BOT_TOKEN ŃŃŃанОвНон
+
+```bash
+ssh root@ваŃ_IP
+cd /var/www/nakama
+nano .env
+```
+
+ĐŃОвоŃŃŃĐľ ŃŃŃОкŃ:
+```
+TELEGRAM_BOT_TOKEN=ваŃ_ŃоаНŃĐ˝ŃĐš_ŃОкон_ĐžŃ_BotFather
+```
+
+### 2. ĐОНŃСОваŃĐľĐťŃ Đ´ĐžĐťĐśĐľĐ˝ напиŃаŃŃ ĐąĐžŃŃ /start
+
+ĐОгда пОНŃСОваŃĐľĐťŃ Đ˛ĐżĐľŃвŃĐľ ĐžŃĐşŃĐžĐľŃ Mini App:
+- ĐĐžŃ Đ°Đ˛ŃОПаŃиŃĐľŃки пОНŃŃĐ¸Ń Đ´ĐžŃŃŃĐż Đ´ĐťŃ ĐžŃĐżŃавки ŃООйŃониК
+- ĐНи пОНŃСОваŃĐľĐťŃ Đ´ĐžĐťĐśĐľĐ˝ напиŃаŃŃ ĐąĐžŃŃ `/start` Один ŃаС
+
+---
+
+## API Endpoint:
+
+```
+POST /api/bot/send-photo
+{
+ "userId": "123456789",
+ "photoUrl": "https://example.com/image.jpg",
+ "caption": "ĐпиŃанио иСОйŃаМониŃ"
+}
+```
+
+---
+
+## Đак иŃпОНŃСОваŃŃ:
+
+1. ĐОНŃСОваŃĐľĐťŃ Đ¸ŃĐľŃ Đ¸ĐˇĐžĐąŃаМонио в пОиŃко (e621/gelbooru)
+2. ĐŃĐşŃŃĐ˛Đ°ĐľŃ ĐżŃĐžŃПОŃŃŃик (Đ˝Đ°ĐśĐ¸ĐźĐ°ĐľŃ Đ˝Đ° каŃŃинкŃ)
+3. ĐĐ°ĐśĐ¸ĐźĐ°ĐľŃ ĐşĐ˝ĐžĐżĐşŃ "ХкаŃаŃŃ" (Download)
+4. ĐСОйŃаМонио ĐżŃиŃ
ĐžĐ´Đ¸Ń Đ˛ ĐĐĄ Ń ĐąĐžŃОП! â
+
+---
+
+## ĐĐťŃŃĐľŃнаŃива (ĐľŃНи ĐąĐžŃ Đ˝Đľ наŃŃŃОон):
+
+ĐŃНи `TELEGRAM_BOT_TOKEN` но ŃŃŃанОвНон:
+- Fallback на ОйŃŃнОо ŃкаŃиванио ŃĐľŃоС ĐąŃаŃСоŃ
+- РайОŃĐ°ĐľŃ ĐąĐľĐˇ йОŃа
+
+---
+
+## ĐйнОвНонио:
+
+```bash
+# ĐагŃŃСиŃŃ Đ˝ĐžĐ˛ŃĐľ ŃаКНŃ
+scp backend/bot.js root@ваŃ_IP:/var/www/nakama/backend/
+scp backend/routes/bot.js root@ваŃ_IP:/var/www/nakama/backend/routes/
+scp backend/server.js root@ваŃ_IP:/var/www/nakama/backend/
+
+# ĐĐľŃоСапŃŃŃиŃŃ backend
+ssh root@ваŃ_IP
+pm2 restart nakama-backend
+```
+
diff --git a/backend/bot.js b/backend/bot.js
new file mode 100644
index 0000000..4d16e58
--- /dev/null
+++ b/backend/bot.js
@@ -0,0 +1,81 @@
+// Telegram Bot Đ´ĐťŃ ĐžŃĐżŃавки иСОйŃаМониК в ĐĐĄ
+const axios = require('axios');
+const config = require('./config');
+
+const TELEGRAM_API = `https://api.telegram.org/bot${config.telegramBotToken}`;
+
+// ĐŃĐżŃавиŃŃ ĐžĐ´Đ˝Đž ŃĐžŃĐž пОНŃСОваŃоНŃ
+async function sendPhotoToUser(userId, photoUrl, caption) {
+ try {
+ const response = await axios.post(`${TELEGRAM_API}/sendPhoto`, {
+ chat_id: userId,
+ photo: photoUrl,
+ caption: caption || '',
+ parse_mode: 'HTML'
+ });
+
+ return response.data;
+ } catch (error) {
+ console.error('ĐŃийка ĐžŃĐżŃавки ŃĐžŃĐž:', error.response?.data || error.message);
+ throw error;
+ }
+}
+
+// ĐŃĐżŃавиŃŃ Đ˝ĐľŃкОНŃкО ŃĐžŃĐž ĐłŃŃппОК (Đ´Đž 10 ŃŃŃĐş)
+async function sendPhotosToUser(userId, photos) {
+ try {
+ // Telegram пОддоŃĐśĐ¸Đ˛Đ°ĐľŃ Đ´Đž 10 ŃĐžŃĐž в ОднОК ĐłŃŃппо
+ const batches = [];
+ for (let i = 0; i < photos.length; i += 10) {
+ batches.push(photos.slice(i, i + 10));
+ }
+
+ const results = [];
+
+ for (const batch of batches) {
+ const media = batch.map((photo, index) => ({
+ type: 'photo',
+ media: photo.url,
+ caption: index === 0 ? `ĐС NakamaSpace\n${batch.length} ŃĐžŃĐž` : undefined,
+ parse_mode: 'HTML'
+ }));
+
+ const response = await axios.post(`${TELEGRAM_API}/sendMediaGroup`, {
+ chat_id: userId,
+ media: media
+ });
+
+ results.push(response.data);
+ }
+
+ return results;
+ } catch (error) {
+ console.error('ĐŃийка ĐžŃĐżŃавки ŃĐžŃĐž ĐłŃŃппОК:', error.response?.data || error.message);
+ throw error;
+ }
+}
+
+// ĐĐąŃайОŃаŃŃ Đ´Đ°Đ˝Đ˝ŃĐľ ĐžŃ Web App
+async function handleWebAppData(userId, dataString) {
+ try {
+ const data = JSON.parse(dataString);
+
+ if (data.action === 'send_image') {
+ const caption = `ĐС NakamaSpace\n\n${data.caption || ''}`;
+ await sendPhotoToUser(userId, data.url, caption);
+ return { success: true, message: 'ĐСОйŃаМонио ĐžŃĐżŃавНонО!' };
+ }
+
+ return { success: false, message: 'ĐоиСвоŃŃнОо доКŃŃвио' };
+ } catch (error) {
+ console.error('ĐŃийка ОйŃайОŃки даннŃŃ
:', error);
+ return { success: false, message: error.message };
+ }
+}
+
+module.exports = {
+ sendPhotoToUser,
+ sendPhotosToUser,
+ handleWebAppData
+};
+
diff --git a/backend/models/Post.js b/backend/models/Post.js
index 43b7345..fd75c07 100644
--- a/backend/models/Post.js
+++ b/backend/models/Post.js
@@ -32,7 +32,8 @@ const PostSchema = new mongoose.Schema({
lowercase: true,
trim: true
}],
- imageUrl: String,
+ imageUrl: String, // ĐĄŃаŃОо пОНо Đ´ĐťŃ ŃОвПоŃŃиПОŃŃи
+ images: [String], // ĐОвОо пОНо - ПаŃŃив иСОйŃаМониК
tags: [{
type: String,
enum: ['furry', 'anime', 'other'],
diff --git a/backend/routes/bot.js b/backend/routes/bot.js
new file mode 100644
index 0000000..3d70d45
--- /dev/null
+++ b/backend/routes/bot.js
@@ -0,0 +1,61 @@
+const express = require('express');
+const router = express.Router();
+const { sendPhotoToUser, sendPhotosToUser } = require('../bot');
+const { authenticate } = require('../middleware/auth');
+
+// Endpoint Đ´ĐťŃ ĐžŃĐżŃавки ОднОгО ŃĐžŃĐž в ĐĐĄ
+router.post('/send-photo', authenticate, async (req, res) => {
+ try {
+ const { userId, photoUrl, caption } = req.body;
+
+ if (!userId || !photoUrl) {
+ return res.status(400).json({ error: 'userId и photoUrl ОйŃСаŃоНŃĐ˝Ń' });
+ }
+
+ const result = await sendPhotoToUser(userId, photoUrl, caption);
+
+ res.json({
+ success: true,
+ message: 'ĐСОйŃаМонио ĐžŃĐżŃавНонО в Đ˛Đ°Ń Telegram',
+ result
+ });
+ } catch (error) {
+ console.error('ĐŃийка ĐžŃĐżŃавки:', error);
+ res.status(500).json({
+ error: 'ĐŃийка ĐžŃĐżŃавки иСОйŃаМониŃ',
+ details: error.message
+ });
+ }
+});
+
+// Endpoint Đ´ĐťŃ ĐžŃĐżŃавки ноŃкОНŃкиŃ
ŃĐžŃĐž ĐłŃŃппОК
+router.post('/send-photos', authenticate, async (req, res) => {
+ try {
+ const { userId, photos } = req.body;
+
+ if (!userId || !photos || !Array.isArray(photos) || photos.length === 0) {
+ return res.status(400).json({ error: 'userId и ПаŃŃив photos ОйŃСаŃоНŃĐ˝Ń' });
+ }
+
+ if (photos.length > 50) {
+ return res.status(400).json({ error: 'ĐакŃиПŃĐź 50 ŃĐžŃĐž Са ŃаС' });
+ }
+
+ const results = await sendPhotosToUser(userId, photos);
+
+ res.json({
+ success: true,
+ message: `${photos.length} иСОйŃаМониК ĐžŃĐżŃавНонО в Đ˛Đ°Ń Telegram`,
+ results
+ });
+ } catch (error) {
+ console.error('ĐŃийка ĐžŃĐżŃавки ŃĐžŃĐž:', error);
+ res.status(500).json({
+ error: 'ĐŃийка ĐžŃĐżŃавки иСОйŃаМониК',
+ details: error.message
+ });
+ }
+});
+
+module.exports = router;
+
diff --git a/backend/routes/posts.js b/backend/routes/posts.js
index e52ea83..45cad77 100644
--- a/backend/routes/posts.js
+++ b/backend/routes/posts.js
@@ -41,6 +41,9 @@ const upload = multer({
}
});
+// ĐОддоŃМка Đ´Đž 5 иСОйŃаМониК в ОднОП пОŃŃĐľ
+const uploadMultiple = upload.array('images', 5);
+
// ĐОНŃŃиŃŃ ĐťĐľĐ˝ŃŃ ĐżĐžŃŃОв
router.get('/', authenticate, async (req, res) => {
try {
@@ -91,9 +94,9 @@ router.get('/', authenticate, async (req, res) => {
});
// ХОСдаŃŃ ĐżĐžŃŃ
-router.post('/', authenticate, postCreationLimiter, upload.single('image'), async (req, res) => {
+router.post('/', authenticate, postCreationLimiter, uploadMultiple, async (req, res) => {
try {
- const { content, tags, mentionedUsers, isNSFW } = req.body;
+ const { content, tags, mentionedUsers, isNSFW, externalImages } = req.body;
// ĐŃОвоŃка ŃогОв
const parsedTags = JSON.parse(tags || '[]');
@@ -104,10 +107,28 @@ router.post('/', authenticate, postCreationLimiter, upload.single('image'), asyn
// ĐСвНоŃŃ Ń
ŃŃŃоги иС кОнŃонŃа
const hashtags = extractHashtags(content);
+ // ĐĐąŃайОŃка иСОйŃаМониК
+ let images = [];
+
+ // ĐагŃŃМоннŃĐľ ŃаКНŃ
+ if (req.files && req.files.length > 0) {
+ images = req.files.map(file => `/uploads/posts/${file.filename}`);
+ }
+
+ // ĐноŃнио иСОйŃĐ°ĐśĐľĐ˝Đ¸Ń (иС пОиŃка)
+ if (externalImages) {
+ const externalUrls = JSON.parse(externalImages);
+ images = [...images, ...externalUrls];
+ }
+
+ // ĐĐąŃаŃĐ˝Đ°Ń ŃОвПоŃŃиПОŃŃŃ - imageUrl Đ´ĐťŃ ĐżĐľŃвОгО иСОйŃаМониŃ
+ const imageUrl = images.length > 0 ? images[0] : null;
+
const post = new Post({
author: req.user._id,
content,
- imageUrl: req.file ? `/uploads/posts/${req.file.filename}` : null,
+ imageUrl, // ĐĐťŃ ŃОвПоŃŃиПОŃŃи
+ images, // ĐОвОо пОНо
tags: parsedTags,
hashtags,
mentionedUsers: mentionedUsers ? JSON.parse(mentionedUsers) : [],
diff --git a/backend/server.js b/backend/server.js
index 0093d82..3e7d6af 100644
--- a/backend/server.js
+++ b/backend/server.js
@@ -69,6 +69,7 @@ app.use('/api/search', require('./routes/search'));
app.use('/api/search/posts', require('./routes/postSearch'));
app.use('/api/moderation', require('./routes/moderation'));
app.use('/api/statistics', require('./routes/statistics'));
+app.use('/api/bot', require('./routes/bot'));
// ĐаСОвŃĐš ŃĐžŃŃ
app.get('/', (req, res) => {
diff --git a/frontend/src/components/CommentsModal.css b/frontend/src/components/CommentsModal.css
index dd1d509..112e97a 100644
--- a/frontend/src/components/CommentsModal.css
+++ b/frontend/src/components/CommentsModal.css
@@ -6,9 +6,10 @@
right: 0;
bottom: 0;
background: var(--bg-secondary);
- z-index: 9999;
+ z-index: 999; /* ĐŃŃĐľ навигаŃии (50) */
pointer-events: all;
touch-action: none;
+ overflow: hidden;
}
.comments-modal {
@@ -172,15 +173,16 @@
.comment-form {
position: fixed;
- bottom: 80px;
+ bottom: 0;
left: 0;
right: 0;
padding: 12px 16px;
+ padding-bottom: calc(12px + 80px); /* ĐŃŃŃŃĐż Đ´ĐťŃ Đ˝Đ°Đ˛Đ¸ĐłĐ°Ńии */
background: var(--bg-secondary);
border-top: 1px solid var(--divider-color);
display: flex;
gap: 8px;
- z-index: 10000;
+ z-index: 1000;
pointer-events: all;
touch-action: auto;
}
diff --git a/frontend/src/components/CreatePostModal.css b/frontend/src/components/CreatePostModal.css
index 4df7c0c..ddeb464 100644
--- a/frontend/src/components/CreatePostModal.css
+++ b/frontend/src/components/CreatePostModal.css
@@ -95,30 +95,60 @@
resize: vertical;
}
+.images-preview {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
+ gap: 8px;
+}
+
.image-preview {
position: relative;
border-radius: 12px;
overflow: hidden;
+ aspect-ratio: 1;
}
.image-preview img {
width: 100%;
- max-height: 300px;
+ height: 100%;
object-fit: cover;
}
.remove-image-btn {
position: absolute;
- top: 8px;
- right: 8px;
- width: 32px;
- height: 32px;
+ top: 4px;
+ right: 4px;
+ width: 24px;
+ height: 24px;
border-radius: 50%;
- background: rgba(0, 0, 0, 0.6);
+ background: rgba(0, 0, 0, 0.7);
color: white;
display: flex;
align-items: center;
justify-content: center;
+ border: none;
+ cursor: pointer;
+}
+
+.action-icon-btn {
+ position: relative;
+}
+
+.image-count {
+ position: absolute;
+ top: -4px;
+ right: -4px;
+ background: #1C1C1E;
+ color: white;
+ font-size: 10px;
+ padding: 2px 6px;
+ border-radius: 10px;
+ font-weight: 600;
+}
+
+[data-theme="dark"] .image-count {
+ background: #FFFFFF;
+ color: #000000;
}
.tags-section {
diff --git a/frontend/src/components/CreatePostModal.jsx b/frontend/src/components/CreatePostModal.jsx
index a45ceb2..2c68f74 100644
--- a/frontend/src/components/CreatePostModal.jsx
+++ b/frontend/src/components/CreatePostModal.jsx
@@ -10,11 +10,12 @@ const TAGS = [
{ value: 'other', label: 'Other', color: '#A0A0A0' }
]
-export default function CreatePostModal({ user, onClose, onPostCreated }) {
+export default function CreatePostModal({ user, onClose, onPostCreated, initialImage }) {
const [content, setContent] = useState('')
const [selectedTags, setSelectedTags] = useState([])
- const [image, setImage] = useState(null)
- const [imagePreview, setImagePreview] = useState(null)
+ const [images, setImages] = useState(initialImage ? [initialImage] : [])
+ const [imagePreviews, setImagePreviews] = useState(initialImage ? [initialImage] : [])
+ const [externalImages, setExternalImages] = useState(initialImage ? [initialImage] : [])
const [isNSFW, setIsNSFW] = useState(false)
const [loading, setLoading] = useState(false)
const [showUserSearch, setShowUserSearch] = useState(false)
@@ -24,26 +25,35 @@ export default function CreatePostModal({ user, onClose, onPostCreated }) {
const fileInputRef = useRef(null)
const handleImageSelect = (e) => {
- const file = e.target.files[0]
- if (file) {
- setImage(file)
+ const files = Array.from(e.target.files)
+ if (files.length === 0) return
+
+ // ĐакŃиПŃĐź 5 иСОйŃаМониК
+ const remainingSlots = 5 - images.length
+ const filesToAdd = files.slice(0, remainingSlots)
+
+ filesToAdd.forEach(file => {
const reader = new FileReader()
reader.onloadend = () => {
- setImagePreview(reader.result)
+ setImagePreviews(prev => [...prev, reader.result])
}
reader.readAsDataURL(file)
- hapticFeedback('light')
- }
- }
-
- const handleRemoveImage = () => {
- setImage(null)
- setImagePreview(null)
+ })
+
+ setImages(prev => [...prev, ...filesToAdd])
+ hapticFeedback('light')
+
if (fileInputRef.current) {
fileInputRef.current.value = ''
}
}
+ const handleRemoveImage = (index) => {
+ setImages(prev => prev.filter((_, i) => i !== index))
+ setImagePreviews(prev => prev.filter((_, i) => i !== index))
+ setExternalImages(prev => prev.filter((_, i) => i !== index))
+ }
+
const toggleTag = (tag) => {
hapticFeedback('light')
if (selectedTags.includes(tag)) {
@@ -84,7 +94,7 @@ export default function CreatePostModal({ user, onClose, onPostCreated }) {
return
}
- if (!content.trim() && !image) {
+ if (!content.trim() && images.length === 0) {
alert('ĐОйавŃŃĐľ ŃокŃŃ Đ¸ĐťĐ¸ иСОйŃаМонио')
return
}
@@ -98,8 +108,16 @@ export default function CreatePostModal({ user, onClose, onPostCreated }) {
formData.append('tags', JSON.stringify(selectedTags))
formData.append('isNSFW', isNSFW)
- if (image) {
- formData.append('image', image)
+ // ĐОйавиŃŃ ĐˇĐ°ĐłŃŃМоннŃĐľ ŃаКНŃ
+ images.forEach((image, index) => {
+ if (image instanceof File) {
+ formData.append('images', image)
+ }
+ })
+
+ // ĐОйавиŃŃ Đ˛Đ˝ĐľŃнио иСОйŃĐ°ĐśĐľĐ˝Đ¸Ń (иС пОиŃка)
+ if (externalImages.length > 0) {
+ formData.append('externalImages', JSON.stringify(externalImages))
}
if (mentionedUsers.length > 0) {
@@ -146,13 +164,17 @@ export default function CreatePostModal({ user, onClose, onPostCreated }) {
rows={6}
/>
- {/* ĐŃовŃŃ Đ¸ĐˇĐžĐąŃĐ°ĐśĐľĐ˝Đ¸Ń */}
- {imagePreview && (
-
-

-
+ {/* ĐŃовŃŃ Đ¸ĐˇĐžĐąŃаМониК */}
+ {imagePreviews.length > 0 && (
+
+ {imagePreviews.map((preview, index) => (
+
+

+
+
+ ))}
)}
@@ -209,12 +231,18 @@ export default function CreatePostModal({ user, onClose, onPostCreated }) {
ref={fileInputRef}
type="file"
accept="image/*"
+ multiple
onChange={handleImageSelect}
style={{ display: 'none' }}
/>
-
)}
- {/* ĐСОйŃаМонио */}
- {post.imageUrl && (
-
-

+ {/* ĐСОйŃĐ°ĐśĐľĐ˝Đ¸Ń */}
+ {images.length > 0 && (
+
+
+

+
+ {images.length > 1 && (
+ <>
+ {currentImageIndex > 0 && (
+
setCurrentImageIndex(currentImageIndex - 1)}>
+
+
+ )}
+
+ {currentImageIndex < images.length - 1 && (
+
setCurrentImageIndex(currentImageIndex + 1)}>
+
+
+ )}
+
+
+ {images.map((_, index) => (
+ setCurrentImageIndex(index)}
+ />
+ ))}
+
+ >
+ )}
+
)}
diff --git a/frontend/src/components/PostMenu.css b/frontend/src/components/PostMenu.css
index 4696224..6fc0462 100644
--- a/frontend/src/components/PostMenu.css
+++ b/frontend/src/components/PostMenu.css
@@ -6,12 +6,13 @@
right: 0;
bottom: 0;
background: var(--bg-secondary);
- z-index: 9999;
+ z-index: 999; /* ĐŃŃĐľ навигаŃии (50) */
display: flex;
flex-direction: column;
padding: 16px;
pointer-events: all;
touch-action: none;
+ overflow: hidden;
}
.report-modal-overlay {
diff --git a/frontend/src/pages/Search.css b/frontend/src/pages/Search.css
index e97f5e9..5a88fa4 100644
--- a/frontend/src/pages/Search.css
+++ b/frontend/src/pages/Search.css
@@ -9,6 +9,9 @@
padding: 16px;
border-bottom: 1px solid var(--divider-color);
z-index: 10;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
}
.search-header h1 {
@@ -17,6 +20,27 @@
color: var(--text-primary);
}
+.selection-toggle {
+ padding: 8px 16px;
+ border-radius: 20px;
+ background: var(--bg-primary);
+ color: var(--text-primary);
+ font-size: 14px;
+ font-weight: 600;
+ border: none;
+ cursor: pointer;
+}
+
+.selection-toggle.active {
+ background: #1C1C1E;
+ color: white;
+}
+
+[data-theme="dark"] .selection-toggle.active {
+ background: #FFFFFF;
+ color: #000000;
+}
+
.search-modes {
display: flex;
gap: 8px;
@@ -152,6 +176,16 @@
overflow: hidden;
cursor: pointer;
padding: 0;
+ transition: all 0.2s;
+}
+
+.result-item.selected {
+ outline: 3px solid #1C1C1E;
+ outline-offset: -3px;
+}
+
+[data-theme="dark"] .result-item.selected {
+ outline-color: #FFFFFF;
}
.result-item img {
@@ -165,6 +199,56 @@
transform: scale(1.05);
}
+.selection-checkbox {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ background: #1C1C1E;
+ color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ font-weight: bold;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
+}
+
+[data-theme="dark"] .selection-checkbox {
+ background: #FFFFFF;
+ color: #000000;
+}
+
+.send-selected-bar {
+ position: fixed;
+ bottom: 80px;
+ left: 0;
+ right: 0;
+ padding: 12px 16px;
+ background: var(--bg-secondary);
+ border-top: 1px solid var(--divider-color);
+ z-index: 100;
+}
+
+.send-selected-btn {
+ width: 100%;
+ padding: 14px;
+ border-radius: 12px;
+ background: #1C1C1E;
+ color: white;
+ font-size: 16px;
+ font-weight: 600;
+ border: none;
+ cursor: pointer;
+}
+
+[data-theme="dark"] .send-selected-btn {
+ background: #FFFFFF;
+ color: #000000;
+}
+
.result-overlay {
position: absolute;
bottom: 0;
@@ -215,16 +299,27 @@
background: rgba(0, 0, 0, 0.5);
}
+.viewer-actions {
+ display: flex;
+ gap: 8px;
+}
+
.viewer-btn {
width: 44px;
height: 44px;
border-radius: 50%;
- background: rgba(255, 255, 255, 0.1);
+ background: rgba(255, 255, 255, 0.15);
color: white;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(10px);
+ border: none;
+ cursor: pointer;
+}
+
+.viewer-btn svg {
+ stroke: white;
}
.viewer-counter {
@@ -239,12 +334,38 @@
align-items: center;
justify-content: center;
overflow: hidden;
+ position: relative;
+ user-select: none;
+ -webkit-user-select: none;
+ touch-action: pan-y pinch-zoom;
}
.viewer-content img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
+ pointer-events: none;
+}
+
+.swipe-hint {
+ position: absolute;
+ bottom: 20px;
+ left: 50%;
+ transform: translateX(-50%);
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 8px 16px;
+ background: rgba(0, 0, 0, 0.7);
+ border-radius: 20px;
+ color: white;
+ font-size: 13px;
+ backdrop-filter: blur(10px);
+ animation: fadeIn 0.3s;
+}
+
+.swipe-hint svg {
+ stroke: white;
}
.viewer-nav {
diff --git a/frontend/src/pages/Search.jsx b/frontend/src/pages/Search.jsx
index f12cec4..9bf7876 100644
--- a/frontend/src/pages/Search.jsx
+++ b/frontend/src/pages/Search.jsx
@@ -1,7 +1,9 @@
-import { useState, useEffect } from 'react'
-import { Search as SearchIcon, ChevronLeft, ChevronRight, Download, X } from 'lucide-react'
+import { useState, useEffect, useRef } from 'react'
+import { Search as SearchIcon, ChevronLeft, ChevronRight, Download, X, Plus } from 'lucide-react'
import { searchFurry, searchAnime, getFurryTags, getAnimeTags } from '../utils/api'
-import { hapticFeedback } from '../utils/telegram'
+import { hapticFeedback, getTelegramUser } from '../utils/telegram'
+import CreatePostModal from '../components/CreatePostModal'
+import api from '../utils/api'
import './Search.css'
export default function Search({ user }) {
@@ -12,6 +14,12 @@ export default function Search({ user }) {
const [tagSuggestions, setTagSuggestions] = useState([])
const [currentIndex, setCurrentIndex] = useState(0)
const [showViewer, setShowViewer] = useState(false)
+ const [selectedImages, setSelectedImages] = useState([])
+ const [selectionMode, setSelectionMode] = useState(false)
+ const [showCreatePost, setShowCreatePost] = useState(false)
+ const [imageForPost, setImageForPost] = useState(null)
+ const touchStartX = useRef(0)
+ const touchEndX = useRef(0)
useEffect(() => {
if (query.length > 1) {
@@ -94,11 +102,71 @@ export default function Search({ user }) {
}
const openViewer = (index) => {
- setCurrentIndex(index)
- setShowViewer(true)
+ if (selectionMode) {
+ toggleImageSelection(index)
+ } else {
+ setCurrentIndex(index)
+ setShowViewer(true)
+ hapticFeedback('light')
+ }
+ }
+
+ const toggleImageSelection = (index) => {
+ const imageId = `${results[index].source}-${results[index].id}`
+
+ if (selectedImages.includes(imageId)) {
+ setSelectedImages(selectedImages.filter(id => id !== imageId))
+ } else {
+ setSelectedImages([...selectedImages, imageId])
+ }
hapticFeedback('light')
}
+ const toggleSelectionMode = () => {
+ setSelectionMode(!selectionMode)
+ setSelectedImages([])
+ hapticFeedback('light')
+ }
+
+ const handleSendSelected = async () => {
+ if (selectedImages.length === 0) return
+
+ try {
+ hapticFeedback('light')
+
+ const telegramUser = getTelegramUser()
+
+ if (telegramUser) {
+ // ĐаКŃи вŃĐąŃаннŃĐľ иСОйŃаМониŃ
+ const selectedPhotos = results.filter((img, index) => {
+ const imageId = `${img.source}-${img.id}`
+ return selectedImages.includes(imageId)
+ })
+
+ const photos = selectedPhotos.map(img => ({
+ url: img.url,
+ caption: `${img.source} - ${img.id}`
+ }))
+
+ await api.post('/bot/send-photos', {
+ userId: telegramUser.id,
+ photos: photos
+ })
+
+ hapticFeedback('success')
+ alert(`â
${selectedImages.length} иСОйŃаМониК ĐžŃĐżŃавНонО в Đ˛Đ°Ń Telegram!`)
+ setSelectedImages([])
+ setSelectionMode(false)
+ } else {
+ alert('ФŃнкŃĐ¸Ń Đ´ĐžŃŃŃпна ŃОНŃкО в Telegram')
+ }
+ } catch (error) {
+ console.error('ĐŃийка:', error)
+ hapticFeedback('error')
+ alert('ĐŃийка ĐžŃĐżŃавки')
+ }
+ }
+
const handleNext = () => {
if (currentIndex < results.length - 1) {
setCurrentIndex(currentIndex + 1)
@@ -113,34 +181,116 @@ export default function Search({ user }) {
}
}
+ const handleTouchStart = (e) => {
+ touchStartX.current = e.touches[0].clientX
+ }
+
+ const handleTouchMove = (e) => {
+ touchEndX.current = e.touches[0].clientX
+ }
+
+ const handleTouchEnd = () => {
+ const diff = touchStartX.current - touchEndX.current
+ const threshold = 50 // ПиниПаНŃнОо ŃаŃŃŃĐžŃнио Đ´ĐťŃ ŃваКпа
+
+ if (Math.abs(diff) > threshold) {
+ if (diff > 0) {
+ // ХваКп вНовО - ŃНодŃŃŃĐ°Ń ĐşĐ°ŃŃинка
+ handleNext()
+ } else {
+ // ХваКп впŃавО - ĐżŃодŃĐ´ŃŃĐ°Ń ĐşĐ°ŃŃинка
+ handlePrev()
+ }
+ }
+ }
+
+ const handleKeyDown = (e) => {
+ if (e.key === 'ArrowLeft') {
+ handlePrev()
+ } else if (e.key === 'ArrowRight') {
+ handleNext()
+ } else if (e.key === 'Escape') {
+ setShowViewer(false)
+ }
+ }
+
+ useEffect(() => {
+ if (showViewer) {
+ window.addEventListener('keydown', handleKeyDown)
+ return () => window.removeEventListener('keydown', handleKeyDown)
+ }
+ }, [showViewer, currentIndex])
+
const handleDownload = async () => {
const currentImage = results[currentIndex]
if (!currentImage) return
try {
hapticFeedback('light')
- const response = await fetch(currentImage.url)
- const blob = await response.blob()
- const url = window.URL.createObjectURL(blob)
- const a = document.createElement('a')
- a.href = url
- a.download = `nakama-${currentImage.id}.jpg`
- document.body.appendChild(a)
- a.click()
- document.body.removeChild(a)
- window.URL.revokeObjectURL(url)
- hapticFeedback('success')
+
+ const telegramUser = getTelegramUser()
+
+ if (telegramUser) {
+ // ĐŃĐżŃавиŃŃ ŃĐľŃоС backend в ĐĐĄ Ń ĐąĐžŃОП
+ const caption = `${currentImage.source} - ID: ${currentImage.id}\nТоги: ${currentImage.tags.slice(0, 3).join(', ')}`
+
+ await api.post('/bot/send-photo', {
+ userId: telegramUser.id,
+ photoUrl: currentImage.url,
+ caption: caption
+ })
+
+ hapticFeedback('success')
+ alert('â
ĐСОйŃаМонио ĐžŃĐżŃавНонО в Đ˛Đ°Ń Telegram!')
+ } else {
+ // Fallback - ОйŃŃнОо ŃкаŃиванио
+ const response = await fetch(currentImage.url)
+ const blob = await response.blob()
+ const url = window.URL.createObjectURL(blob)
+ const a = document.createElement('a')
+ a.href = url
+ a.download = `nakama-${currentImage.id}.jpg`
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ window.URL.revokeObjectURL(url)
+ hapticFeedback('success')
+ }
} catch (error) {
- console.error('ĐŃийка ŃкаŃиваниŃ:', error)
+ console.error('ĐŃийка:', error)
hapticFeedback('error')
+ alert('ĐŃийка ĐžŃĐżŃавки. ĐŃОвоŃŃŃĐľ наŃŃŃОКки йОŃа.')
}
}
+ const handleCreatePost = () => {
+ const currentImage = results[currentIndex]
+ setImageForPost(currentImage.url)
+ setShowViewer(false)
+ setShowCreatePost(true)
+ hapticFeedback('light')
+ }
+
+ const handlePostCreated = (newPost) => {
+ setShowCreatePost(false)
+ setImageForPost(null)
+ hapticFeedback('success')
+ alert('â
ĐĐžŃŃ ŃОСдан!')
+ }
+
return (
{/* ĐĽĐľĐ´ĐľŃ */}
ĐОиŃĐş
+ {results.length > 0 && (
+
+ {selectionMode ? 'ĐŃПона' : 'ĐŃĐąŃаŃŃ'}
+
+ )}
{/* Đ ĐľĐśĐ¸ĐźŃ ĐżĐžĐ¸Ńка */}
@@ -222,26 +372,45 @@ export default function Search({ user }) {
) : (
- {results.map((item, index) => (
-
openViewer(index)}
- >
-

-
-
{item.source}
-
{item.rating}
+ {results.map((item, index) => {
+ const imageId = `${item.source}-${item.id}`
+ const isSelected = selectedImages.includes(imageId)
+
+ return (
+
openViewer(index)}
+ >
+

+
+ {item.source}
+ {item.rating}
+
+ {selectionMode && (
+
+ {isSelected && â}
+
+ )}
-
- ))}
+ )
+ })}
+
+ {/* ĐнОпка ĐžŃĐżŃавки вŃĐąŃаннŃŃ
*/}
+ {selectionMode && selectedImages.length > 0 && (
+
+
+ ĐŃĐżŃавиŃŃ Đ˛ Telegram ({selectedImages.length})
+
+
+ )}
)}
{/* ĐŃĐžŃПОŃŃŃик иСОйŃаМониК */}
{showViewer && results[currentIndex] && (
-
setShowViewer(false)}>
+
setShowViewer(false)}>
@@ -249,27 +418,50 @@ export default function Search({ user }) {
{currentIndex + 1} / {results.length}
- { e.stopPropagation(); handleDownload(); }}>
-
-
+
-
e.stopPropagation()}>
-

+
+

+
+ {/* ĐндикаŃĐžŃ ŃваКпа */}
+
+ 0 ? 1 : 0.3 }} />
+ ХваКпаКŃĐľ Đ´ĐťŃ ĐżĐľŃокНŃŃониŃ
+
+
{ e.stopPropagation(); handlePrev(); }}
+ onClick={handlePrev}
disabled={currentIndex === 0}
+ style={{ opacity: currentIndex === 0 ? 0.3 : 1 }}
>
{ e.stopPropagation(); handleNext(); }}
+ onClick={handleNext}
disabled={currentIndex === results.length - 1}
+ style={{ opacity: currentIndex === results.length - 1 ? 0.3 : 1 }}
>
diff --git a/âĄ_ĐĐĐĐĐĐТЏ_ĐĄĐĐЧĐĐĄ.txt b/âĄ_ĐĐĐĐĐĐТЏ_ĐĄĐĐЧĐĐĄ.txt
deleted file mode 100644
index 2236465..0000000
--- a/âĄ_ĐĐĐĐĐĐТЏ_ĐĄĐĐЧĐĐĄ.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â ⥠ĐĐĐĐĐĐĐĐĐĐ v2.1.3 - ĐĄĐĐĐĐĐ ĐŁĐ Đ ĐĐĐУХТР⥠â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-â
ЧТРĐĐĄĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- â
ĐОППонŃаŃии ĐĐ ĐżŃŃгаŃŃ (на ĐťŃйОП ŃŃŃŃОКŃŃво)
- â
ĐОНо ввОда пОНнОŃŃŃŃ Đ°ĐşŃивнО
- â
ĐŃийки 401 иŃĐżŃавНонŃ
- â
ĐнОпки Đ˛Đ¸Đ´Đ˝Ń Đ˛ ŃŃПнОК ŃоПо (йоНŃĐľ Ń ŃŃŃĐ˝ŃĐź ŃокŃŃОП)
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- đ¤ ĐĐĐĐĐĐĐŤ ĐĐĐŻ ĐĐĐĐĐĐĐĐĐĐŻ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-1ď¸âŁ ĐĐ ĐĐĐĐЏЎТĐĐ Đ (Terminal):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/index.html root@ваŃ_IP:/var/www/nakama/frontend/
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp backend/middleware/auth.js root@ваŃ_IP:/var/www/nakama/backend/middleware/
-
-
-2ď¸âŁ ĐĐ ĐĄĐĐ ĐĐĐ Đ (ŃкОпиŃŃĐšŃĐľ воŃŃ ĐąĐťĐžĐş):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build && cd .. && pm2 restart nakama-backend && pm2 logs nakama-backend --lines 20
-
-
-â
ĐĐТĐĐĐ! ĐŃОвоŃŃĐšŃĐľ: https://nakama.glpshchn.ru
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-đ§Ş ĐĐ ĐĐĐРЏТĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-⥠ĐОППонŃаŃии:
- 1. ĐŃĐşŃОКŃĐľ ĐťŃйОК пОŃŃ
- 2. ĐаМПиŃĐľ на Đ¸ĐşĐžĐ˝ĐşŃ đŹ
- 3. ĐаМПиŃĐľ на пОНо ввОда
- 4. ĐкнО ĐРдОНМнО ĐżŃŃгаŃŃ â
- 5. ĐводиŃĐľ ŃокŃŃ
- 6. ĐŃĐżŃавŃŃĐľ кОППонŃаŃиК â
-
-⥠ТŃĐźĐ˝Đ°Ń ŃоПа:
- 1. ĐŃĐžŃĐ¸ĐťŃ â ТоПа â ТŃПнаŃ
- 2. ĐĐľŃниŃĐľŃŃ Đ˝Đ° гНавнŃŃ
- 3. ĐнОпки "ĐŃĐľ", "Furry" и Ń.Đ´. - ĐĐĐĐŤĐ â
- 4. ТокŃŃ Đ˝Đ° кнОпкаŃ
ЧĐĐ ĐĐŤĐ â
-
-⥠ĐОги (на ŃĐľŃвоŃĐľ):
- 1. pm2 logs nakama-backend
- 2. ĐРдОНМнО ĐąŃŃŃ ĐžŃийОк 401 â
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĐĐĐĐĐĐĐŻ:
-
-Frontend:
- ⢠index.html - viewport fix
- ⢠CommentsModal.jsx - ĐżŃавиНŃĐ˝ŃĐš onClick
- ⢠CommentsModal.css - ĐżŃодОŃвŃаŃонио ĐżŃŃМкОв
- ⢠Feed.css - йоНŃĐľ кнОпки в ŃŃПнОК ŃоПо
- ⢠Search.css - йоНŃĐľ кнОпки в ŃŃПнОК ŃоПо
-
-Backend:
- ⢠auth.js - ŃĐźŃĐłŃона ĐżŃОвоŃка авŃĐžŃиСаŃии
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đĄ ĐĐĄĐРЧТĐ-ТРĐĐ Đ ĐĐĐТĐĐТ:
-
-pm2 restart nakama-backend
-sudo systemctl restart nginx
-pm2 logs nakama-backend
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ v2.1.3 гОŃОв!
-
-ĐŃĐľ ĐşŃиŃиŃĐľŃкио йаги иŃĐżŃавНонŃ.
-ĐŃиНОМонио ŃŃайиНŃнО ŃайОŃĐ°ĐľŃ Đ˝Đ° nakama.glpshchn.ru
-
diff --git a/âĄ_ĐĐ ĐХТĐĐ_Đ ĐШĐĐĐĐ.txt b/âĄ_ĐĐ ĐХТĐĐ_Đ ĐШĐĐĐĐ.txt
deleted file mode 100644
index b09c4f6..0000000
--- a/âĄ_ĐĐ ĐХТĐĐ_Đ ĐШĐĐĐĐ.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â ⥠ĐĐ ĐХТĐĐ Đ ĐШĐĐĐĐ - ĐĐĐĐĐĐĐ ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐР⥠â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-Đ ĐШĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐОППонŃаŃии ĐžŃĐşŃŃваŃŃŃŃ ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐĐ (как ĐžŃдоНŃĐ˝Đ°Ń ŃŃŃаниŃа)
-
-â ĐнОпка X ввоŃŃ
Ń ŃНова - СакŃŃваоŃ
-â ĐОНо ввОда Đ˛Đ˝Đ¸ĐˇŃ (над навигаŃиоК) - Đ ĐĐĐТĐĐТ
-â ĐиŃогО ĐĐ ĐżŃŃгаоŃ
-â ĐŃŃ ĐşĐťĐ¸ĐşĐ°ĐąĐľĐťŃнО
-
-
-ĐĐĐĐĐĐТЏ (2 ŃаКНа):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
Đ ĐĐĐТĐĐТ:
-
-⥠ĐŃĐşŃОКŃĐľ пОŃŃ
-⥠ĐаМПиŃĐľ đŹ
-⥠ĐŃĐşŃОоŃŃŃ Đ˝Đ° воŃŃ ŃĐşŃан
-⥠ĐаМПиŃĐľ на пОНо ввОда â
-⥠ĐапиŃиŃĐľ кОППонŃаŃиК â
-⥠ĐŃĐżŃавŃŃĐľ â
-⥠ĐаМПиŃĐľ X - СакŃОоŃŃŃ â
-
-
-ĐŃоПŃ: 1 ПинŃŃа
-
diff --git a/âŤ_ĐĐĐĐĐĽĐ ĐĐ.txt b/âŤ_ĐĐĐĐĐĽĐ ĐĐ.txt
deleted file mode 100644
index 77a3ff8..0000000
--- a/âŤ_ĐĐĐĐĐĽĐ ĐĐ.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â ⍠ĐĐĐĐĐĽĐ ĐĐĐĐĐŻ ĐĐĐĐТРР- ĐĐĐ ĐĄĐĐĐĐР⍠â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-đ¨ ĐŚĐĐТĐĐĐĐŻ ĐĄĐĽĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĄĐĐТĐĐĐŻ ТĐĐĐ:
- ĐоакŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ°: âââ ХвоŃНО-ŃĐľŃĐ°Ń (#E5E5EA)
- ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ°: âââ ЧŃŃĐ˝Đ°Ń (#1C1C1E)
- ĐнОпка +: âââ ЧŃŃнаŃ
- ĐнОпка ĐžŃĐżŃавиŃŃ: âââ ЧŃŃнаŃ
-
-ТĐĐĐĐĐŻ ТĐĐĐ:
- ĐоакŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ°: âââ ТŃПнО-ŃĐľŃĐ°Ń (#3A3A3C)
- ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ°: âââ ĐĐľĐťĐ°Ń (#FFFFFF)
- ĐнОпка +: âââ ĐоНаŃ
- ĐнОпка ĐžŃĐżŃавиŃŃ: âââ ĐоНаŃ
-
-
-ĐĐĐĐĐĐĐĐĐĐ (5 ŃаКНОв):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CreatePostModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP "cd /var/www/nakama/frontend && npm run build"
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
Đ ĐĐĐŁĐЏТĐТ:
-
-ХвоŃĐťĐ°Ń ŃоПа:
- [âââ Furry âââ] [âââ ĐŃĐľ âââ] [âââ Anime âââ]
- ноакŃивнŃĐľ акŃивнаŃ
-
-ТŃĐźĐ˝Đ°Ń ŃоПа:
- [âââ Furry âââ] [âââ ĐŃĐľ âââ] [âââ Anime âââ]
- ноакŃивнŃĐľ ĐĐĐĐĐŻ
-
-
-ĐĐТ ĐĄĐĐĐĐĐ ĐĐĐĐĐ!
-ТОНŃкО ŃŃŃнОо и йоНОо! âŤâŞ
-
diff --git a/â
_READY.txt b/â
_READY.txt
deleted file mode 100644
index b6d80de..0000000
--- a/â
_READY.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â â
NakamaSpace v2.1.1 - ĐĐТĐĐ Đ ĐĐĐĐĐĐŽ! â
â
-â â
-â nakama.glpshchn.ru â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- ⨠ĐĐĄĐ ĐĐĄĐĐ ĐĐĐĐĐĐĐŻ ĐĐ ĐĐĐĐĐĐĐŤ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- â
ĐкнО кОППонŃаŃиов ŃайОŃĐ°ĐľŃ Đ¸Đ´ĐľĐ°ĐťŃнО
- â
РопОŃŃŃ ŃĐ´Đ°ĐťĐľĐ˝Ń ĐżĐžĐťĐ˝ĐžŃŃŃŃ
- â
ТŃĐźĐ˝Đ°Ń ŃоПа - вŃŃ Đ˛Đ¸Đ´Đ˝Đž
- â
ФиНŃŃŃ NSFW ŃайОŃаоŃ
- â
ĐŃĐžŃĐ¸ĐťŃ ŃĐżŃĐžŃŃĐ˝
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- đ ĐĐĐĐ ĐŁĐĐТЏ ĐĐ ĐĄĐĐ ĐĐĐ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐŃпОНниŃĐľ 3 кОПандŃ:
-
-
-ââ 1ď¸âŁ ĐĐ ĐĐĐĐЏЎТĐĐ Đ âââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop
-tar -czf nakama.tar.gz nakama --exclude='node_modules' --exclude='dist'
-scp nakama.tar.gz root@ваŃ_IP:/tmp/
-
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ââ 2ď¸âŁ ĐĐĐĐĐЎЧĐТЏХЯ Đ ĐĄĐĐ ĐĐĐ ĐŁ ââââââââââââââââââââââââââââââââââââââââââ
-
-ssh root@ваŃ_IP
-
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ââ 3ď¸âŁ ĐĐ ĐĄĐĐ ĐĐĐ Đ (вŃŃ ĐşĐžĐźĐ°Đ˝Đ´Đ° ОднОК ŃŃŃОкОК) ââââââââââââââââââââââââââ
-
-cd /var/www/nakama && cp .env /tmp/e && cp -r backend/uploads /tmp/u && cd /var/www && sudo rm -rf nakama && sudo tar -xzf /tmp/nakama.tar.gz && cd nakama && cp /tmp/e .env && mkdir -p backend/uploads && cp -r /tmp/u/* backend/uploads/ && chmod +x update-server.sh && ./update-server.sh
-
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- â
ĐĐ ĐĐĐĐ ĐĐ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-Đа ŃĐľŃвоŃĐľ:
-
- pm2 status
- pm2 logs nakama-backend
- curl https://nakama.glpshchn.ru/health
-
-
-Đ ĐąŃаŃСоŃĐľ:
-
- https://nakama.glpshchn.ru
-
-
-Đ Telegram:
-
- ĐŃĐşŃОКŃĐľ йОŃа â Menu Button
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
- đŻ Đ§Đ˘Đ ĐĐ ĐĐĐĐ ĐТЏ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- ⥠ĐŃĐşŃОКŃĐľ пОŃŃ â наМПиŃĐľ đŹ
- ââ ĐкнО но на воŃŃ ŃĐşŃан
- ââ ĐОНо ввОда акŃивнО
- ââ ĐОМнО напиŃаŃŃ ĐşĐžĐźĐźĐľĐ˝ŃаŃиК
-
- ⥠ТОНŃкО 2 кнОпки пОд пОŃŃОП
- ââ â¤ď¸ ĐаКк
- ââ đŹ ĐОППонŃаŃиК
-
- ⥠ĐĐľŃокНŃŃиŃĐľ ŃŃПнŃŃ ŃоПŃ
- ââ ĐŃĐľ икОнки виднŃ
- ââ ТокŃŃ ŃиŃаоП
-
- ⥠ĐŃĐžŃĐ¸ĐťŃ â ФиНŃŃŃ NSFW
- ââ ĐĐľŃокНŃŃаоŃŃŃ
- ââ ĐĐžŃŃŃ ĐżĐžŃвНŃŃŃŃŃ/иŃŃоСаŃŃ
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĄĐĐ ĐĐŁĐĐĐ ĐĐĐĐĐŠĐŹ:
-
- README_DEPLOY.txt - ĐŃĐžŃŃĐ°Ń Đ¸Đ˝ŃŃŃŃĐşŃиŃ
- CHANGELOG_v2.1.1.md - ЧŃĐž иСПониНОŃŃ
- UPLOAD_TO_SERVER.md - ĐОдŃОйнО
- DEPLOYMENT.md - ĐОНнŃĐš гаКд
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐžŃОвО! ĐŃĐľ ĐżŃĐžĐąĐťĐľĐźŃ Đ¸ŃĐżŃавНонŃ!
-
-ĐŃŃаНОŃŃ ŃОНŃкО СагŃŃСиŃŃ Đ˝Đ° ŃĐľŃĐ˛ĐľŃ (3 ĐşĐžĐźĐ°Đ˝Đ´Ń Đ˛ŃŃĐľ) âŹď¸
-
diff --git a/â
_ĐĐĐĐĐĐŹĐĐ.txt b/â
_ĐĐĐĐĐĐŹĐĐ.txt
deleted file mode 100644
index 8047331..0000000
--- a/â
_ĐĐĐĐĐĐŹĐĐ.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â â
ĐĐĐĐĐĐŹĐĐĐ Đ ĐШĐĐĐĐ v2.1.3 â
â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-đŻ Đ ĐШĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-1. ĐОППонŃаŃии ĐĐ ĐżŃŃгаŃŃ:
- â height: 60dvh (но ПонŃĐľŃŃŃ ĐżŃи кНавиаŃŃŃĐľ)
- â Telegram WebApp API viewportChanged event
- â position: fixed
- â ĐŃавиНŃĐ˝ŃĐš onClick handler
-
-2. ĐнОпки в ŃŃПнОК ŃоПо:
- â ĐХРкнОпки ĐĐĐĐŤĐ (#FFFFFF)
- â ТокŃŃ ŃŃŃĐ˝ŃĐš (#000000)
- â ĐĐşŃивнаŃ: ĐĐĐĐĐŻ Ń ŃиноК ŃаПкОК + ŃиниК ŃокŃŃ
-
-
-ĐĐĐĐĐĐĐĐĐĐ (4 ŃаКНа):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐĐЏЎТĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend
-npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
Đ ĐĐĐŁĐЏТĐТ РТĐĐĐĐРТĐĐĐ:
-
-ĐнОпки на гНавнОК:
- âââââââ âââââââ âââââââââ âââââââââ
- â ĐŃĐľ â âFurryâ â Anime â â Other â â ĐĐĄĐ ĐĐĐĐŤĐ
- âââââââ âââââââ âââââââââ âââââââââ
- â˛
- â
- ââ ĐĐşŃивнаŃ: ĐąĐľĐťĐ°Ń Ń ĐĄĐĐĐĐ Đ ĐĐĐĐĐ
-
-ĐнОпки в пОиŃко:
- âââââââ âââââââââ âââââââââ
- âFurryâ â Anime â â Mixed â â ĐĐĄĐ ĐĐĐĐŤĐ
- âââââââ âââââââââ âââââââââ
-
-
-ĐОППонŃаŃии:
- ⢠ĐкнО ŃикŃиŃОваннОо (60dvh)
- ⢠ĐĐ ĐżŃŃĐłĐ°ĐľŃ ĐżŃи ŃОкŃŃĐľ
- ⢠ĐОНо ввОда акŃивнО
- ⢠РайОŃĐ°ĐľŃ Đ˝Đ° ŃоНоŃОно и Đ´ĐľŃĐşŃОпо
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ§Ş ĐĐ ĐĐĐĐ ĐĐ:
-
-1. ĐŃĐşŃОКŃĐľ https://nakama.glpshchn.ru
-2. ĐĐľŃокНŃŃиŃĐľ ŃŃПнŃŃ ŃоПŃ
-3. ĐĐťĐ°Đ˛Đ˝Đ°Ń â кнОпки "ĐŃĐľ", "Furry" и Ń.Đ´. - ĐĐĐĐŤĐ â
-4. ĐŃĐşŃОКŃĐľ пОŃŃ â кОППонŃаŃии đŹ
-5. ĐаМПиŃĐľ на пОНо ввОда
-6. ĐкнО ĐĐ ĐżŃŃĐłĐ°ĐľŃ â
-7. ĐводиŃĐľ кОППонŃаŃиК â
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĐĐĐĐŹĐĐ!
-
-ĐŃĐľĐźŃ ĐžĐąĐ˝ĐžĐ˛ĐťĐľĐ˝Đ¸Ń: 2 ПинŃŃŃ
-ĐСПононО: 4 ŃаКНа (ŃОНŃкО frontend)
-Backend поŃоСапŃŃкаŃŃ ĐĐ Đ˝ŃМнО
-
diff --git a/â¨_ĐĐĄĐ_ФУĐĐĐŚĐĐ_ĐĐТĐĐĐŤ.txt b/â¨_ĐĐĄĐ_ФУĐĐĐŚĐĐ_ĐĐТĐĐĐŤ.txt
new file mode 100644
index 0000000..0127739
--- /dev/null
+++ b/â¨_ĐĐĄĐ_ФУĐĐĐŚĐĐ_ĐĐТĐĐĐŤ.txt
@@ -0,0 +1,128 @@
+âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+â â
+â ⨠ĐХРФУĐĐĐŚĐĐ Đ ĐĐĐĐĐĐĐĐĐĐŤ Đ ĐĐТĐĐĐŤ ⨠â
+â v2.2.0 - Major Update â
+â â
+âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+
+đ ЧТРĐĐĐĐĐĐĐĐĐ:
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+1. ĐĐž 5 каŃŃинОк в ОднОП пОŃŃĐľ
+ â ĐнОМоŃŃĐ˛ĐľĐ˝Đ˝Đ°Ń ĐˇĐ°ĐłŃŃСка ŃаКНОв
+ â ĐĄĐľŃка ĐżŃовŃŃ Đ˛ ŃОСдании пОŃŃа
+ â ĐаŃŃŃĐľĐťŃ Đ˛ НонŃĐľ (ŃваКп ĐźĐľĐśĐ´Ń ĐşĐ°ŃŃинкаПи)
+ â ТОŃки-индикаŃĐžŃŃ Đ˛Đ˝Đ¸ĐˇŃ
+
+2. ХОСдаŃŃ ĐżĐžŃŃ Đ¸Đˇ пОиŃка (ŃопОŃŃ)
+ â ĐнОпка "+" в ĐżŃĐžŃПОŃŃŃико
+ â ĐаŃŃинка авŃОПаŃиŃĐľŃки дОйавНŃĐľŃŃŃ
+ â ĐОМнО дОйавиŃŃ ŃокŃŃ Đ¸ Ńоги
+
+3. ĐŃĐżŃавка в ĐĐĄ Ń ĐąĐžŃОП
+ â Đдна каŃŃинка иС ĐżŃĐžŃПОŃŃŃика
+ â ĐĐľŃкОНŃкО каŃŃинОк (ŃоМиП вŃйОŃа)
+ â ĐĐž 50 ŃĐžŃĐž Са ŃаС
+ â Media Group в Telegram
+
+4. Swipe поŃоНиŃŃŃванио
+ â Đ ĐżŃĐžŃПОŃŃŃико пОиŃка
+ â РкаŃŃŃоНи пОŃŃа
+ â ĐĄŃŃоНки на кНавиаŃŃŃĐľ
+
+5. ĐОнОŃ
ŃОПнŃĐš диСаКн
+ â ТОНŃкО ŃŃŃнОо и йоНОо
+ â ĐоС ŃиниŃ
кнОпОк
+
+
+ĐĐĐĐĐĐĐĐĐĐ (13 ŃаКНОв):
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+Backend (5):
+scp backend/models/Post.js root@ваŃ_IP:/var/www/nakama/backend/models/
+scp backend/routes/posts.js root@ваŃ_IP:/var/www/nakama/backend/routes/
+scp backend/bot.js root@ваŃ_IP:/var/www/nakama/backend/
+scp backend/routes/bot.js root@ваŃ_IP:/var/www/nakama/backend/routes/
+scp backend/server.js root@ваŃ_IP:/var/www/nakama/backend/
+
+Frontend (8):
+scp frontend/src/components/CreatePostModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/components/CreatePostModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/components/PostCard.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/components/PostCard.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/pages/Search.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
+scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
+scp frontend/src/components/Navigation.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+
+Đа ŃĐľŃвоŃĐľ:
+ssh root@ваŃ_IP
+cd /var/www/nakama/frontend && npm run build && cd .. && pm2 restart nakama-backend
+
+
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+đą ĐĐĐ ĐĐĄĐĐĐĐŹĐĐĐĐТЏ:
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+ХОСдаŃŃ ĐżĐžŃŃ Ń Đ˝ĐľŃкОНŃкиПи ŃĐžŃĐž:
+ 1. ĐонŃа â кнОпка "+"
+ 2. ĐаМПиŃĐľ Đ¸ĐşĐžĐ˝ĐşŃ đźď¸
+ 3. ĐŃйоŃиŃĐľ Đ´Đž 5 ŃĐžŃĐž
+ 4. ĐŃовŃŃ ĐżĐžŃвиŃŃŃ ŃĐľŃкОК
+ 5. ĐОйавŃŃĐľ ŃокŃŃ Đ¸ Ńоги
+ 6. ĐĐżŃйНикОваŃŃ
+
+РопОŃŃ Đ¸Đˇ пОиŃка:
+ 1. ĐОиŃĐş â наКдиŃĐľ каŃŃинкŃ
+ 2. ĐŃĐşŃОКŃĐľ ĐżŃĐžŃПОŃŃŃик
+ 3. ĐаМПиŃĐľ ĐşĐ˝ĐžĐżĐşŃ "+" ввоŃŃ
Ń
+ 4. ĐŃĐşŃОоŃŃŃ ŃОСданио пОŃŃа Ń ŃŃОК каŃŃинкОК
+ 5. ĐОйавŃŃĐľ ŃокŃŃ Đ¸ Ńоги
+ 6. ĐĐżŃйНикОваŃŃ
+
+ĐŃĐżŃавиŃŃ Đ˛ йОŃа:
+ 1. ĐОиŃĐş â ĐżŃĐžŃПОŃŃŃик
+ 2. ĐнОпка "Download" â 1 ŃĐžŃĐž в ĐĐĄ
+
+ ĐĐĐ:
+
+ 1. ĐОиŃĐş â кнОпка "ĐŃĐąŃаŃŃ"
+ 2. ТапаКŃĐľ пО каŃŃинкаП
+ 3. "ĐŃĐżŃавиŃŃ Đ˛ Telegram (N)" â вŃĐľ в ĐĐĄ
+
+ХваКп в пОŃŃĐľ:
+ 1. ĐŃНи в пОŃŃĐľ ноŃкОНŃкО каŃŃинОк
+ 2. ХваКпаКŃĐľ вНовО/впŃавО
+ 3. ТОŃки Đ˛Đ˝Đ¸ĐˇŃ ĐżĐžĐşĐ°ĐˇŃваŃŃ ŃокŃŃŃŃ
+
+
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+âď¸ ĐĐХТРĐĐĐĐ ĐĐТĐ:
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+Đ .env на ŃĐľŃвоŃĐľ:
+ TELEGRAM_BOT_TOKEN=ваŃ_ŃОкон_ĐžŃ_BotFather
+
+ĐОНŃСОваŃĐľĐťŃ Đ´ĐžĐťĐśĐľĐ˝ напиŃаŃŃ /start йОŃŃ ĐžĐ´Đ¸Đ˝ ŃаС
+
+
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+â
ĐĐТĐĐĐ:
+
+ â ĐĐž 5 ŃĐžŃĐž в пОŃŃĐľ
+ â ĐаŃŃŃĐľĐťŃ Đ˛ НонŃĐľ
+ â РопОŃŃ Đ¸Đˇ пОиŃка
+ â ĐŃĐżŃавка в йОŃа
+ â Swipe навигаŃиŃ
+ â ĐОнОŃ
ŃОПнŃĐš диСаКн
+
+
+5 ПинŃŃ ĐžĐąĐ˝ĐžĐ˛ĐťĐľĐ˝Đ¸Ń
+https://nakama.glpshchn.ru
+
+đ NakamaSpace v2.2.0!
+
diff --git a/â¨_ĐĄ_ĐĐХТĐĐ.txt b/â¨_ĐĄ_ĐĐХТĐĐ.txt
deleted file mode 100644
index e67d192..0000000
--- a/â¨_ĐĄ_ĐĐХТĐĐ.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â ⨠ĐĐĐĐĐĐТĐĐ ĐĐ ĐĄ ĐĐХТĐĐ - ĐĐТĐĐР⨠â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ЧТРĐĐĐĐĐĐĐĐĐĄĐŹ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐОППонŃаŃии ĐžŃĐşŃŃваŃŃŃŃ Đ˝Đ° ĐĐĐĄĐŹ ĐĐĐ ĐРи пОкаСŃваŃŃ:
-
- ââââââââââââââââââââââââââââââââââââââââ
- â [X] ĐОППонŃаŃии â â модоŃ
- ââââââââââââââââââââââââââââââââââââââââ¤
- â đ¤ ĐвŃĐžŃ ĐżĐžŃŃа â
- â ТокŃŃ ĐżĐžŃŃа... â
- â [ĐСОйŃаМонио ĐľŃНи ĐľŃŃŃ] â â ĐĐžŃŃ
- ââââââââââââââââââââââââââââââââââââââââ¤
- â đŹ ĐОППонŃаŃиК 1 â
- â đŹ ĐОППонŃаŃиК 2 â
- â ... â â ĐОППонŃаŃии
- â â
- ââââââââââââââââââââââââââââââââââââââââ¤
- â [ĐапиŃаŃŃ ĐşĐžĐźĐźĐľĐ˝ŃаŃиК...] [â¤] â â ФОŃПа ввОда
- ââââââââââââââââââââââââââââââââââââââââ
- ĐавигаŃĐ¸Ń (ĐонŃа, ĐОиŃĐş и Ń.Đ´.)
-
-
-ĐĐĐĐĐĐТЏ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
Đ ĐĐĐŁĐЏТĐТ:
-
- â ĐĐžŃŃ Đ˛Đ¸Đ´ĐľĐ˝ ввоŃŃ
Ń ĐźĐžĐ´Đ°ĐťĐşĐ¸
- â ĐОНо ввОда Đ˛Đ˝Đ¸ĐˇŃ Đ ĐĐĐТĐĐТ
- â ĐиŃогО ĐĐ ĐżŃŃгаоŃ
- â ĐнОпка X СакŃŃваоŃ
-
-
-1 ПинŃŃа
-
diff --git a/â_START_HERE.txt b/â_START_HERE.txt
deleted file mode 100644
index 0bcc57f..0000000
--- a/â_START_HERE.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â ĐĐЧĐĐТРĐТХЎĐĐ â â
-â NakamaSpace v2.1.1 - Production Ready â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĄĐ ĐĐĄĐĐ ĐĐĐĐĐĐĐŻ ĐĐ ĐĐĐĐĐĐĐŤ!
-
-ĐкнО кОППонŃаŃиов â
-РопОŃŃŃ ŃĐ´Đ°ĐťĐľĐ˝Ń â
-ТŃĐźĐ˝Đ°Ń ŃоПа видна â
-ФиНŃŃŃŃ ŃайОŃаŃŃ â
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĐĐ ĐŁĐĐТЏ ĐĐ ĐĄĐĐ ĐĐĐ - 3 ĐĐĐĐĐĐĐŤ:
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ШĐĐ 1 - ĐĐ ĐĐĐĐЏЎТĐĐ Đ (Terminal):
-
-cd /Users/glpshchn/Desktop
-tar -czf nakama.tar.gz nakama --exclude='node_modules' --exclude='dist'
-scp nakama.tar.gz root@ваŃ_IP:/tmp/
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ШĐĐ 2 - ĐĐĐĐĐЎЧĐТЏХЯ Đ ĐĄĐĐ ĐĐĐ ĐŁ:
-
-ssh root@ваŃ_IP
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ШĐĐ 3 - ĐĐ ĐĄĐĐ ĐĐĐ Đ (ŃкОпиŃŃĐšŃĐľ воŃŃ ĐąĐťĐžĐş):
-
-cd /var/www/nakama && cp .env /tmp/env-backup && cp -r backend/uploads /tmp/uploads-backup && cd /var/www && sudo rm -rf nakama && sudo tar -xzf /tmp/nakama.tar.gz && cd nakama && cp /tmp/env-backup .env && mkdir -p backend/uploads && cp -r /tmp/uploads-backup/* backend/uploads/ && chmod +x update-server.sh && ./update-server.sh
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐТĐĐĐ!
-
-ĐŃОвоŃŃŃĐľ: https://nakama.glpshchn.ru
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐĐĐĐ ĐĐĐĐĐŻ ĐĐХТРУĐĐŚĐĐŻ:
-
-README_DEPLOY.txt - ĐŃĐžŃŃĐ°Ń Đ¸Đ˝ŃŃŃŃĐşŃиŃ
-UPLOAD_TO_SERVER.md - ĐĐľŃаНŃĐ˝Đ°Ń Đ¸Đ˝ŃŃŃŃĐşŃиŃ
-CHANGELOG_v2.1.1.md - ЧŃĐž иСПониНОŃŃ
-DEPLOYMENT.md - ĐОНнŃĐš гаКд пО допНОŃ
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đĄ ĐĐĄĐРЧТĐ-ТРĐĐ Đ ĐĐĐТĐĐТ:
-
-pm2 logs nakama-backend - ĐĐžŃПОŃŃĐľŃŃ ĐťĐžĐłĐ¸
-pm2 restart nakama-backend - ĐĐľŃоСапŃŃŃиŃŃ
-sudo systemctl restart nginx - ĐĐľŃоСапŃŃŃиŃŃ Nginx
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ĐŁŃпоŃнОгО допНОŃ! đ
-
diff --git a/đ¨_ĐĐĐĐĐХТĐĐ_ФĐТĐ_Đ_ĐĐХТĐ.txt b/đ¨_ĐĐĐĐĐХТĐĐ_ФĐТĐ_Đ_ĐĐХТĐ.txt
new file mode 100644
index 0000000..5353a5f
--- /dev/null
+++ b/đ¨_ĐĐĐĐĐХТĐĐ_ФĐТĐ_Đ_ĐĐХТĐ.txt
@@ -0,0 +1,83 @@
+âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+â â
+â đ¨ ĐĐĐĄĐĐĐĐŹĐĐ ĐĐРТĐĐĐĐ Đ ĐĐĐĐĐ ĐĐХТРđ¨ â
+â â
+âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+
+⨠ĐĐĐЍРФУĐĐĐŚĐĐ:
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+1. ĐĐž 5 каŃŃинОк в ОднОП пОŃŃĐľ
+ ⢠ĐнОМоŃŃĐ˛ĐľĐ˝Đ˝Đ°Ń ĐˇĐ°ĐłŃŃСка ŃаКНОв
+ ⢠ХоŃка ĐżŃовŃŃ
+ ⢠ХŃŃŃŃик "N/5"
+ ⢠УдаНонио каМдОК каŃŃинки ĐžŃдоНŃнО
+
+2. ХОСдаŃŃ ĐżĐžŃŃ Đ¸Đˇ пОиŃка
+ ⢠ĐнОпка "+" в ĐżŃĐžŃПОŃŃŃико
+ ⢠ĐаŃŃинка авŃОПаŃиŃĐľŃки дОйавиŃŃŃ Đ˛ пОŃŃ
+ ⢠ĐОМнО дОйавиŃŃ ŃокŃŃ Đ¸ Ńоги
+
+3. ĐОПйинаŃĐ¸Ń ĐˇĐ°ĐłŃŃМоннŃŃ
и вноŃниŃ
+ ⢠ĐагŃŃСиŃŃ ŃвОи ŃĐžŃĐž
+ ⢠ĐОйавиŃŃ Đ¸Đˇ пОиŃка
+ ⢠ĐŃŃ Đ˛ĐźĐľŃŃĐľ в ОднОП пОŃŃĐľ
+
+
+ĐĐĐ ĐĐĄĐĐĐĐŹĐĐĐĐТЏ:
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+ĐаŃĐ¸Đ°Đ˝Ń 1 - ĐагŃŃСиŃŃ ŃвОи ŃĐžŃĐž:
+ 1. ХОСдаŃŃ ĐżĐžŃŃ â кнОпка đźď¸
+ 2. ĐŃйоŃиŃĐľ ноŃкОНŃкО ŃаКНОв (Đ´Đž 5)
+ 3. ĐĐžŃвиŃŃŃ ŃĐľŃка ĐżŃовŃŃ
+ 4. ĐОйавŃŃĐľ ŃокŃŃ Đ¸ Ńоги
+ 5. ĐĐżŃйНикОваŃŃ
+
+ĐаŃĐ¸Đ°Đ˝Ń 2 - ĐС пОиŃка:
+ 1. ĐОиŃĐş â наКдиŃĐľ каŃŃинкŃ
+ 2. ĐŃĐşŃОКŃĐľ ĐżŃĐžŃПОŃŃŃик
+ 3. ĐаМПиŃĐľ ĐşĐ˝ĐžĐżĐşŃ "+"
+ 4. ĐŃĐşŃОоŃŃŃ ŃОСданио пОŃŃа Ń ŃŃОК каŃŃинкОК
+ 5. ĐОйавŃŃĐľ ŃокŃŃ Đ¸ Ńоги
+ 6. ĐĐżŃйНикОваŃŃ
+
+
+ĐĐĐĐĐĐĐĐĐĐ (10 ŃаКНОв):
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+Backend:
+cd /Users/glpshchn/Desktop/nakama
+
+scp backend/models/Post.js root@ваŃ_IP:/var/www/nakama/backend/models/
+scp backend/routes/posts.js root@ваŃ_IP:/var/www/nakama/backend/routes/
+scp backend/bot.js root@ваŃ_IP:/var/www/nakama/backend/
+scp backend/routes/bot.js root@ваŃ_IP:/var/www/nakama/backend/routes/
+scp backend/server.js root@ваŃ_IP:/var/www/nakama/backend/
+
+Frontend:
+scp frontend/src/components/CreatePostModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/components/CreatePostModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
+scp frontend/src/pages/Search.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
+scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
+
+Đа ŃĐľŃвоŃĐľ:
+ssh root@ваŃ_IP
+cd /var/www/nakama/frontend && npm run build && cd .. && pm2 restart nakama-backend
+
+
+ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
+
+â
ĐĐТĐĐĐ:
+
+ â ĐĐž 5 ŃĐžŃĐž в пОŃŃĐľ
+ â ХОСдаŃŃ ĐżĐžŃŃ Đ¸Đˇ пОиŃка (ŃопОŃŃ)
+ â Swipe в ĐżŃĐžŃПОŃŃŃико
+ â ĐŃĐżŃавка в ĐĐĄ Ń ĐąĐžŃОП
+ â ĐнОМоŃŃвоннŃĐš вŃйОŃ
+
+
+3 ПинŃŃŃ
+https://nakama.glpshchn.ru
+
diff --git a/đŻ_FINAL_ALL_FIXES.txt b/đŻ_FINAL_ALL_FIXES.txt
deleted file mode 100644
index 195eaa2..0000000
--- a/đŻ_FINAL_ALL_FIXES.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đŻ Đ¤ĐĐĐĐĐŹĐĐĐ ĐĐĐĐĐĐĐĐĐĐ - ĐХРФĐĐĐĄĐŤ â
-â NakamaSpace v2.1.3 â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-â
ĐĐĄĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-1. â
ĐОППонŃаŃии ĐĐ ĐżŃŃгаŃŃ
- â ĐŁĐąŃан stopPropagation
- â ĐŃавиНŃĐ˝Đ°Ń ĐżŃОвоŃка кНика
- â РайОŃĐ°ĐľŃ Đ˝Đ° Đ´ĐľŃĐşŃОпо и ПОйиНŃнОП
-
-2. â
ĐŃийка 401 иŃĐżŃавНона
- â ĐĄĐźŃĐłŃона ĐżŃОвоŃка авŃĐžŃиСаŃии
- â РайОŃĐ°ĐľŃ Đ´Đ°ĐśĐľ йоС TELEGRAM_BOT_TOKEN
- â ĐОги ŃОНŃкО ĐżŃодŃĐżŃоМдониŃ
-
-3. â
ТŃĐźĐ˝Đ°Ń ŃоПа - кнОпки виднŃ
- â ĐоНŃĐľ кнОпки Ń Đ§ĐĐ ĐĐŤĐ ŃокŃŃОП
- â ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ° ĐĄĐĐĐŻĐŻ
-
-
-ĐĐĐĐĐĐТЏ ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ ШĐĐ 1 - ĐĐ ĐĐĐĐЏЎТĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/index.html root@ваŃ_IP:/var/www/nakama/frontend/
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp backend/middleware/auth.js root@ваŃ_IP:/var/www/nakama/backend/middleware/
-
-
-đ ШĐĐ 2 - ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ssh root@ваŃ_IP
-
-cd /var/www/nakama/frontend
-npm run build
-
-cd ..
-pm2 restart nakama-backend
-
-
-â
ĐĐТĐĐĐ!
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ĐĐ ĐĐĐРЏТĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-1. ĐОППонŃаŃии:
- â ĐŃĐşŃОКŃĐľ пОŃŃ â наМПиŃĐľ đŹ
- â ĐОдаНка вŃĐľĐ´ĐľŃ ŃниСŃ
- â ĐаМПиŃĐľ на пОНо ввОда
- â ĐкнО ĐРдОНМнО ĐżŃŃгаŃŃ Đ˛Đ˛ĐľŃŃ
- â ĐŃŃŃĐžŃ Đ´ĐžĐťĐśĐľĐ˝ пОŃвиŃŃŃŃ
- â ĐОМнО ввоŃŃи ŃокŃŃ
- â ĐаМПиŃĐľ ĐžŃĐżŃавиŃŃ
-
-2. ТŃĐźĐ˝Đ°Ń ŃоПа:
- â ĐĐľŃокНŃŃиŃĐľ на ŃŃПнŃŃ
- â ĐнОпки "ĐŃĐľ", "Furry" и Ń.Đ´. - ĐĐĐĐŤĐ Ń Đ§ĐĐ ĐĐŤĐ ŃокŃŃОП
- â ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ° - ĐĄĐĐĐŻĐŻ
-
-3. ĐвŃĐžŃиСаŃиŃ:
- â pm2 logs nakama-backend
- â ĐРдОНМнО ĐąŃŃŃ ĐžŃийОк 401
-
-
-ĐĐĐĐĐĐĐРФĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-Frontend (5):
- â index.html
- â components/CommentsModal.jsx
- â components/CommentsModal.css
- â pages/Feed.css
- â pages/Search.css
-
-Backend (1):
- â middleware/auth.js
-
-
-ĐĐ ĐĐĐŻ ĐĐĐĐĐĐĐĐĐĐŻ: 3 ПинŃŃŃ
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-đ ĐĐžŃНо ОйнОвНониŃ:
-
- â
ĐОППонŃаŃии ŃайОŃаŃŃ Đ¸Đ´ĐľĐ°ĐťŃнО
- â
ĐиŃогО но ĐżŃŃгаоŃ
- â
ТŃĐźĐ˝Đ°Ń ŃоПа пОНнОŃŃŃŃ Đ˛Đ¸Đ´Đ˝Đ°
- â
ĐĐľŃ ĐžŃийОк 401
- â
ĐŃŃ ŃŃайиНŃнО
-
-
-https://nakama.glpshchn.ru
-
diff --git a/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ.txt b/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ.txt
deleted file mode 100644
index 264e2a9..0000000
--- a/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đŻ ĐĐĐĐĐĐŻ ĐĐĐĐĐĐ ĐĐĐĐ ĐĐĐĐĐĐ đŻ â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ЧТРĐĐĐĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-Overlay (ŃОн ПОдаНки):
- pointer-events: all; â ĐНОкиŃŃĐľŃ ĐХРкНики пОд ŃОйОК
- touch-action: none; â ĐНОкиŃŃĐľŃ touch пОд ŃОйОК
- z-index: 9999; â ĐОвоŃŃ
ĐĐĄĐĐĐ
-
-ĐОдаНка (ŃОдоŃМиПОо):
- pointer-events: all; â ĐНики ŃайОŃаŃŃ
- touch-action: auto; â Touch ŃайОŃаоŃ
-
-
-ĐĐĐĐĐĐТЏ (2 ŃаКНа):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP "cd /var/www/nakama/frontend && npm run build"
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ТĐĐĐĐ ĐŹ:
-
- â ĐНики ĐĐ ĐżŃĐžŃ
ОдŃŃ ŃĐşĐ˛ĐžĐˇŃ ĐźĐžĐ´Đ°ĐťĐşŃ
- â ĐиСŃаН = ŃоаНŃнОŃŃŃ
- â ĐнОпки ŃайОŃаŃŃ ŃаП гдо виднŃ
- â "УдаНиŃŃ ĐżĐžŃŃ" Đ ĐĐĐТĐĐТ
- â ĐОНо ввОда Đ ĐĐĐТĐĐТ
-
-
-30 ŃокŃнд
-https://nakama.glpshchn.ru
-
diff --git a/đŻ_ĐĐĐĄĐĐĐĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt b/đŻ_ĐĐĐĄĐĐĐĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt
deleted file mode 100644
index 3138093..0000000
--- a/đŻ_ĐĐĐĄĐĐĐĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đŻ ĐĐĐĄĐĐĐĐĐĐ ĐĐĐĐĐĐĐĐĐĐ v2.1.4 (ŃинаН) â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-â
ĐĐĄĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- â
ĐĐľĐ˝Ń ĐżĐžŃŃа (ŃŃи ŃĐžŃки) но ĐżŃŃгаоŃ
- â
ĐнОпка "УдаНиŃŃ ĐżĐžŃŃ" ŃопоŃŃ Đ˝Đ°ĐśĐ¸ĐźĐ°ĐľŃŃŃ
- â
ĐОППонŃаŃии но ĐżŃŃгаŃŃ (dvh + Telegram API)
- â
ĐнОпки ŃиНŃŃŃОв ĐżŃавиНŃĐ˝ŃĐľ:
- ⢠ĐоакŃивнаŃ: ŃŃПнО-ŃĐľŃаŃ
- ⢠ĐĐşŃивнаŃ: ĐĐĐĐĐŻ
-
-
-đ§ ЧТРХĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-PostMenu.jsx:
- ⢠УйŃан stopPropagation()
- ⢠ĐОйавНон handleOverlayClick
- ⢠ĐНик ŃайОŃĐ°ĐľŃ ĐżŃавиНŃнО
-
-PostMenu.css:
- ⢠position: fixed; bottom: 80px
- ⢠cursor: pointer
- ⢠transform ĐżŃи active
- ⢠svg Ń currentColor
-
-
-ĐĐĐĐĐĐĐĐĐĐ (6 ŃаКНОв):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐĐЏЎТĐĐ Đ:
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/PostMenu.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐ ĐĐĐĐ ĐĐ:
-
-1. ĐĐľĐ˝Ń ĐżĐžŃŃа:
- â ĐаМПиŃĐľ ŃŃи ŃĐžŃки (âŻ)
- â ĐĐľĐ˝Ń Đ˛ŃĐľĐ´ĐľŃ ŃниСŃ
- â ĐĐ ĐżŃŃгаоŃ
- â ĐнОпка "УдаНиŃŃ ĐżĐžŃŃ" ĐĐĐĐĐĐĐТХЯ â
-
-2. ĐОППонŃаŃии:
- â ĐŃĐşŃОКŃĐľ кОППонŃаŃии (đŹ)
- â ĐĐ ĐżŃŃгаŃŃ
- â ĐОНо ввОда акŃивнО â
-
-3. ТŃĐźĐ˝Đ°Ń ŃоПа - кнОпки:
- ââââââââââââââââââââââââââââââââââââââââ
- â [âââ ĐŃĐľ âââ] â ĐąĐľĐťĐ°Ń (акŃивнаŃ) â
- â [âââ Furry âââ] â ŃŃПнО-ŃĐľŃĐ°Ń â
- â [âââ Anime âââ] â ŃŃПнО-ŃĐľŃĐ°Ń â
- â [âââ Other âââ] â ŃŃПнО-ŃĐľŃĐ°Ń â
- ââââââââââââââââââââââââââââââââââââââââ
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ v2.1.4 ФĐĐĐĐ
-
-ĐХРПОдаНŃĐ˝ŃĐľ Окна иŃĐżŃавНонŃ:
- â ĐОППонŃаŃии
- â ĐĐľĐ˝Ń ĐżĐžŃŃа
- â ХОСданио пОŃŃа
-
-ĐŃĐľĐźŃ ĐžĐąĐ˝ĐžĐ˛ĐťĐľĐ˝Đ¸Ń: 2 ПинŃŃŃ
-https://nakama.glpshchn.ru
-
diff --git a/đĽ_Đ ĐĐĐТĐĐТ.txt b/đĽ_Đ ĐĐĐТĐĐТ.txt
deleted file mode 100644
index f182aa9..0000000
--- a/đĽ_Đ ĐĐĐТĐĐТ.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đĽ ТĐĐĐĐ ĐŹ ТĐЧĐĐ Đ ĐĐĐТĐĐТ đĽ â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ЧТРХĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐŁĐąŃаН ĐĐĄĐŽ ĐĄĐĐĐĐĐХТЏ
-â
ĐĐľŃĐ˝ŃĐť stopPropagation() (йоС ногО ĐĐ ŃайОŃаоŃ!)
-â
ĐŁĐąŃаН position: fixed
-â
ĐŁĐąŃаН Telegram API ŃĐťŃŃаŃоНи
-â
ĐакŃиПаНŃнО ĐżŃĐžŃŃОК CSS
-
-
-ĐĐĐ Đ ĐĐĐТĐĐТ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-Overlay (ŃŃПнŃĐš ŃОн):
- onClick={onClose} â СакŃŃваоŃ
-
-ĐОдаНка (йоНŃĐš йНОк):
- onClick={e => e.stopPropagation()} â йНОкиŃŃĐľŃ Đ˛ŃпНŃŃио
-
- â ĐНики ĐĐУТРРПОдаНки ŃайОŃаŃŃ! â
- â ĐНики на overlay СакŃŃваŃŃ! â
-
-
-ĐĐĐĐĐĐТЏ (2 ФĐĐĐĐ):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ĐĐТĐĐĐ!
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
УдаНиŃŃ ĐżĐžŃŃ - Đ ĐĐĐТĐĐТ
-â
ĐОППонŃаŃии - ĐĐ ĐżŃŃгаŃŃ
-â
ĐОНо ввОда - ĐĐТĐĐĐĐ
-â
ĐŃŃ Đ˝Đ°ĐśĐ¸ĐźĐ°ĐľŃŃŃ
-
-https://nakama.glpshchn.ru
-
diff --git a/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ_ĐĐĐĐĐĐ.txt b/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ_ĐĐĐĐĐĐ.txt
deleted file mode 100644
index 8126973..0000000
--- a/đŻ_ĐĐĐĐĐĐ ĐĐĐĐ_ĐĐĐĐĐĐ.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đŻ ĐĐĐĐĐĐ ĐĐĐĐ ĐĐĐĐĐĐ - ĐĐĄĐĐ ĐĐĐĐĐĐ đŻ â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐНики ĐżŃĐžŃ
ОдиНи ĐĄĐĐĐĐĐŹ ĐźĐžĐ´Đ°ĐťĐşŃ Đş ŃНоПонŃаП пОд ноК
-
-
-Đ ĐШĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐОйавНонО:
- pointer-events: all; â ĐНОкиŃŃĐľŃ ĐşĐťĐ¸ĐşĐ¸
- touch-action: none; â ĐНОкиŃŃĐľŃ touch
- z-index: 9999; â ĐОвоŃŃ
вŃогО
-
-
-ĐĐĐĐĐĐТЏ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ТĐĐĐĐ ĐŹ:
-
- â ĐНики ĐĐ ĐżŃĐžŃ
ОдŃŃ ŃĐşĐ˛ĐžĐˇŃ ĐźĐžĐ´Đ°ĐťĐşŃ
- â ĐнОпки ŃайОŃаŃŃ ĐłĐ´Đľ Они виднŃ
- â ĐОНо ввОда ĐĐТĐĐĐĐ
- â "УдаНиŃŃ ĐżĐžŃŃ" Đ ĐĐĐТĐĐТ
-
-
-30 ŃокŃнд
-
diff --git a/đĽ_ĐĐĄĐĐ ĐĐĐĐĐĐ_ĐĐĐĐŽ.txt b/đĽ_ĐĐĄĐĐ ĐĐĐĐĐĐ_ĐĐĐĐŽ.txt
deleted file mode 100644
index 2737026..0000000
--- a/đĽ_ĐĐĄĐĐ ĐĐĐĐĐĐ_ĐĐĐĐŽ.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đĽ ĐĐĐĐŽ ĐĐХТРĐĐĄĐĐ ĐĐĐĐĐĐ - ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐĐ đĽ â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-Đ ĐШĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐľĐ˝Ń ĐżĐžŃŃа (ŃŃи ŃĐžŃки) ŃопоŃŃ ĐžŃĐşŃŃваоŃŃŃ ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐĐ
-
- ââââââââââââââââââââââââââââââââââââââââ
- â [X] ĐоКŃŃĐ˛Đ¸Ń â â модоŃ
- ââââââââââââââââââââââââââââââââââââââââ¤
- â â
- â đď¸ ĐŁĐ´Đ°ĐťĐ¸ŃŃ ĐżĐžŃŃ â â Đ ĐĐĐТĐĐТ! â
- â â
- â âď¸ ĐŃПона â
- â â
- ââââââââââââââââââââââââââââââââââââââââ
-
-
-ĐĐĐ ĐĄĐĐĐĐĐХТĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- â ĐĐТ overlay
- â ĐĐТ stopPropagation
- â ĐĐТ ŃНОМнŃŃ
кНикОв
- â ĐĐ ĐХТРкнОпки кОŃĐžŃŃĐľ Đ ĐĐĐТĐЎТ
-
-
-ĐĐĐĐĐĐТЏ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/PostMenu.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ТĐĐĐĐ ĐŹ:
-
- â ĐĐľĐ˝Ń ĐĐ ĐżŃŃгаоŃ
- â ĐнОпка "УдаНиŃŃ ĐżĐžŃŃ" Đ ĐĐĐТĐĐТ â
- â ĐнОпка "ĐŃПона" Đ ĐĐĐТĐĐТ â
- â ĐŃŃ ĐşĐťĐ¸ĐşĐ°ĐąĐľĐťŃнО â
-
-
-1 ПинŃŃа
-
diff --git a/đĽ_ФĐĐĐĐ.txt b/đĽ_ФĐĐĐĐ.txt
deleted file mode 100644
index 1355a8d..0000000
--- a/đĽ_ФĐĐĐĐ.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đĽ ФĐĐĐĐĐŹĐĐĐŻ ĐĐĐ ĐĄĐĐŻ v2.1.3 đĽ â
-â ĐĐĐĐĐĐŹĐĐ! â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-đ¨ ĐĐĐĐĐРРТĐĐĐĐРТĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- ĐоакŃивнаŃ: âââ ŃŃПнО-ŃĐľŃĐ°Ń (#3A3A3C) Ń ĐąĐľĐťŃĐź ŃокŃŃОП
-
- ĐĐşŃивнаŃ: âââ ĐĐĐĐĐŻ (#FFFFFF) Ń ŃŃŃĐ˝ŃĐź ŃокŃŃОП
-
- ĐŃĐ¸ĐźĐľŃ Đ˝Đ° гНавнОК:
-
- [âââ ĐŃĐľ âââ] [âââ Furry âââ] [âââ Anime âââ] [âââ Other âââ]
- â акŃĐ¸Đ˛Đ˝Đ°Ń Đ˝ĐľĐ°ĐşŃивнŃĐľ â
- ĐĐĐĐĐŻ ТĐĐĐĐ-ĐĄĐĐ ĐŤĐ
-
-
-đŹ ĐĐĐĐĐĐТĐĐ ĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
- â height: 60dvh (ĐРПонŃĐľŃŃŃ ĐżŃи кНавиаŃŃŃĐľ)
- â Telegram WebApp API (ŃикŃаŃĐ¸Ń ĐżŃи viewportChanged)
- â position: fixed
- â ĐĐ ĐżŃŃгаŃŃ Đ˝Đ¸ на ŃоНоŃОно, ни на Đ´ĐľŃĐşŃОпо
-
-
-ĐĐĐĐĐĐТЏ (2 ПинŃŃŃ):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐĐЏЎТĐĐ Đ:
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐ ĐĐĐРЏТĐ:
-
-1. ТŃĐźĐ˝Đ°Ń ŃоПа â ĐНавнаŃ:
-
- ĐоакŃивнŃĐľ кнОпки: ТĐĐĐĐ-ĐĄĐĐ ĐŤĐ â
- ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ°: ĐĐĐĐĐŻ â
-
-2. ĐОППонŃаŃии:
-
- ĐŃĐşŃОКŃĐľ â наМПиŃĐľ на пОНо â ĐĐ ĐżŃŃĐłĐ°ĐľŃ â
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-đ v2.1.3 ĐĐТĐĐ!
-
-https://nakama.glpshchn.ru
-
diff --git a/đ_FINAL_UPDATE.txt b/đ_FINAL_UPDATE.txt
deleted file mode 100644
index 10308d5..0000000
--- a/đ_FINAL_UPDATE.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đ ФĐĐĐĐĐŹĐĐĐ ĐĐĐĐĐĐĐĐĐĐ v2.1.2 đ â
-â â
-â ĐŃĐľ ĐżŃĐžĐąĐťĐľĐźŃ Đ¸ŃĐżŃавНонŃ! â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-â
ĐĐĄĐĐ ĐĐĐĐĐĐ Đ ĐТĐĐ ĐĐĐĐĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-1. ĐнОпка "ĐŃĐľ" на гНавнОК ŃŃŃаниŃĐľ
- â ТопоŃŃ Ń ĐąĐľĐťŃĐź ŃокŃŃОП и ŃаПкОК (виднО в ŃŃПнОК ŃоПо)
-
-2. ĐнОпка "ĐĐżŃйНикОваŃŃ"
- â ТопоŃŃ ĐĄĐĐĐŻĐŻ вПоŃŃĐž ŃĐľŃОК (вŃогда видна)
-
-3. ĐнОпки ŃоМиПОв (Furry, Anime, Mixed)
- â ĐĄ йоНŃĐź ŃокŃŃОП и ŃаПкОК
-
-4. ĐĐşŃивнŃĐľ кнОпки
- â ĐŃĐľ ŃŃаНи ĐĄĐĐĐĐĐ (вПоŃŃĐž ŃŃŃĐ˝ŃŃ
)
-
-
-ĐЍХТРĐĐ ĐĐĐĐĐĐĐĐĐĐ (ŃОНŃкО CSS):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐĐЏЎТĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/pages/Feed.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/pages/Search.css root@ваŃ_IP:/var/www/nakama/frontend/src/pages/
-scp frontend/src/components/CreatePostModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend
-npm run build
-
-
-ĐĐТĐĐĐ! â
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐйнОвНонио СаКПŃŃ 2 ПинŃŃŃ!
-
-
-ĐĐ ĐĐĐРЏТĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐŃĐşŃОКŃĐľ https://nakama.glpshchn.ru
-
-1. ĐĐľŃокНŃŃиŃĐľ ŃŃПнŃŃ ŃĐľĐźŃ (ĐŃĐžŃĐ¸ĐťŃ â ТоПа â ТŃПнаŃ)
-
-2. ĐĐľŃниŃĐľŃŃ Đ˝Đ° гНавнŃŃ (ĐонŃа)
- â ĐнОпки "ĐŃĐľ", "Furry", "Anime", "Other" - ĐĐĐĐĐŤ (йоНŃĐš ŃокŃŃ)
- â ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ° - ĐĄĐĐĐŻĐŻ
-
-3. ĐаМПиŃĐľ "+" (ŃОСдаŃŃ ĐżĐžŃŃ)
- â ĐнОпка "ĐĐżŃйНикОваŃŃ" - ĐĄĐĐĐŻĐŻ и ĐĐĐĐĐ
-
-4. ĐĐľŃоКдиŃĐľ в ĐОиŃĐş
- â ĐнОпки "Furry", "Anime", "Mixed" - ĐĐĐĐĐŤ
- â ĐĐşŃĐ¸Đ˛Đ˝Đ°Ń ĐşĐ˝ĐžĐżĐşĐ° - ĐĄĐĐĐŻĐŻ
-
-
-ĐĐĄĐ ĐĐĐĐĐĐ ĐЍТЏ ĐĐĐĐĐ! â
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐСПонониŃ:
- ⢠3 CSS ŃаКНа
- ⢠0 JavaScript
- ⢠0 Backend
- ⢠ТОНŃкО поŃĐľŃйОŃка frontend
-
-ĐŃоПŃ: ~2 ПинŃŃŃ
-
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â ĐĐžŃОвО! đ â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
diff --git a/đ_ФĐĐĐĐĐŹĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt b/đ_ФĐĐĐĐĐŹĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt
deleted file mode 100644
index 8b41338..0000000
--- a/đ_ФĐĐĐĐĐŹĐĐĐ_ĐĐĐĐĐĐĐĐĐĐ.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đ ФĐĐĐĐĐŹĐĐĐ ĐĐĐĐĐĐĐĐĐĐ - Đ ĐĐĐТĐĐТ 100% đ â
-â v2.1.4 â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ЧТРĐĐĄĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐОППонŃаŃии:
- ⢠ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐĐ
- ⢠ĐОкаСŃваоŃŃŃ ĐżĐžŃŃ ŃвоŃŃ
Ń
- ⢠ĐОНо ввОда Đ ĐĐĐТĐĐТ
- ⢠ĐĐ ĐżŃŃгаоŃ
- ⢠ĐНики ĐĐ ĐżŃĐžŃ
ОдŃŃ ŃквОСŃ
-
-â
ĐĐľĐ˝Ń ĐżĐžŃŃа (âŻ):
- ⢠ĐĐ ĐĐĐĄĐŹ ĐĐĐ ĐĐ
- ⢠ĐнОпка "УдаНиŃŃ" Đ ĐĐĐТĐĐТ
- ⢠ĐНики ĐĐ ĐżŃĐžŃ
ОдŃŃ ŃквОСŃ
- ⢠pointer-events ĐżŃавиНŃĐ˝ŃĐľ
-
-â
ТŃĐźĐ˝Đ°Ń ŃоПа - кнОпки:
- ⢠ĐоакŃивнаŃ: ŃŃПнО-ŃĐľŃаŃ
- ⢠ĐĐşŃивнаŃ: ĐĐĐĐĐŻ
-
-
-ĐĐĐĐĐĐĐĐĐĐ (2 ФĐĐĐĐ):
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĄĐĐĐĐĐ ĐŁĐТРЌĐĐĐĐĐĐ:
-
-cd /Users/glpshchn/Desktop/nakama && scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/ && scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/ && ssh root@ваŃ_IP "cd /var/www/nakama/frontend && npm run build"
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐĐĄĐĐ ĐĐĐĐĐĐĐĐĐĐŻ:
-
-ĐОППонŃаŃии (đŹ):
- ⥠ĐŃĐşŃОКŃĐľ ĐťŃйОК пОŃŃ
- ⥠ĐаМПиŃĐľ đŹ
- ⥠ХвоŃŃ
Ń Đ˛Đ¸Đ´ĐľĐ˝ пОŃŃ
- ⥠ĐĐ˝Đ¸ĐˇŃ ĐżĐžĐťĐľ ввОда
- ⥠ĐапиŃиŃĐľ кОППонŃаŃиК â
- ⥠ĐŃĐżŃавŃŃĐľ â
-
-ĐĐľĐ˝Ń ĐżĐžŃŃа (âŻ):
- ⥠ĐаМПиŃĐľ ŃŃи ŃĐžŃки
- ⥠ĐŃĐşŃОоŃŃŃ ĐźĐľĐ˝Ń Đ˝Đ° воŃŃ ŃĐşŃан
- ⥠ĐаМПиŃĐľ "УдаНиŃŃ ĐżĐžŃŃ" â
- ⥠РĐĐĐТĐĐТ! â
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐŻ: 30 ŃокŃнд
-
-https://nakama.glpshchn.ru
-
-đ ĐĐТĐĐĐ!
-
diff --git a/đ¨_ĐĄĐ ĐЧĐĐŤĐ_ФĐĐĐĄ.txt b/đ¨_ĐĄĐ ĐЧĐĐŤĐ_ФĐĐĐĄ.txt
deleted file mode 100644
index af00bb7..0000000
--- a/đ¨_ĐĄĐ ĐЧĐĐŤĐ_ФĐĐĐĄ.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-â â
-â đ¨ ĐĄĐ ĐЧĐĐĐ ĐĐĄĐĐ ĐĐĐĐĐĐĐ - Đ ĐĐĐТĐĐТ 100% đ¨ â
-â â
-âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-
-ĐĐ ĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â ĐŃи наМаŃии на ĐźĐžĐ´Đ°ĐťĐşŃ ĐžĐ˝Đ° ŃНоŃĐ°ĐľŃ Đ˛Đ˝Đ¸Đˇ
-â ĐнОпки но наМиПаŃŃŃŃ
-â ĐŃŃ ĐżŃŃгаоŃ
-
-
-Đ ĐШĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐľŃĐ˝ŃĐť stopPropagation() ĐĐ ĐĐĐĐĐĐĐŁ
-â
onClick={onClose} ŃОНŃкО на overlay
-â
ĐŁĐąŃаН position: fixed Ń ĐźĐžĐ´Đ°ĐťĐşĐ¸
-â
ĐОдаНка внŃŃŃи overlay ŃĐľŃоС flex
-
-
-ĐĐĐĐĐĐĐĐĐĐ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐ ĐĐĐĐЏЎТĐĐ Đ (Terminal):
-
-cd /Users/glpshchn/Desktop/nakama
-
-scp frontend/src/components/CommentsModal.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/CommentsModal.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.jsx root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-scp frontend/src/components/PostMenu.css root@ваŃ_IP:/var/www/nakama/frontend/src/components/
-
-
-ĐĐ ĐĄĐĐ ĐĐĐ Đ:
-
-ssh root@ваŃ_IP
-cd /var/www/nakama/frontend && npm run build
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-ĐĐĐ Đ ĐĐĐТĐĐТ:
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-Overlay (ŃŃПнŃĐš ŃОн):
- onClick={onClose} â СакŃŃĐ˛Đ°ĐľŃ ĐźĐžĐ´Đ°ĐťĐşŃ
-
-ĐОдаНка (йоНŃĐš йНОк):
- onClick={e => e.stopPropagation()} â ĐРСакŃŃваоŃ, кНики ŃайОŃаŃŃ
-
-ĐнОпки внŃŃŃи:
- onClick={onDelete} â ŃайОŃаŃŃ! â
-
-
-ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
-
-â
ĐĐĐĄĐĐ ĐĐĐĐĐĐĐĐĐĐŻ:
-
- â ĐĐľĐ˝Ń ĐĐ ĐżŃŃгаоŃ
- â ĐнОпка "УдаНиŃŃ ĐżĐžŃŃ" Đ ĐĐĐТĐĐТ
- â ĐОППонŃаŃии ĐĐ ĐżŃŃгаŃŃ
- â ĐОНо ввОда акŃивнО
- â ĐŃŃ ĐşĐťĐ¸ĐşĐ°ĐąĐľĐťŃнО
-
-
-ĐĐ ĐĐĐŻ: 2 ПинŃŃŃ
-
-https://nakama.glpshchn.ru
-