diff --git a/course-work/Implementations/README.md b/course-work/Implementations/README.md
new file mode 100644
index 0000000..cbc5bff
--- /dev/null
+++ b/course-work/Implementations/README.md
@@ -0,0 +1,5 @@
+ФАК. НОМЕР: 2301322002
+ИМЕНА: КРИСТИЯН КАРАМИЛЕВ
+
+Проекта е за стрийминг платформата Twitch.
+Всеки файл отговаря за точка от курсовата работа.
diff --git a/course-work/Implementations/Screenshot 2025-10-23 170733.png b/course-work/Implementations/Screenshot 2025-10-23 170733.png
new file mode 100644
index 0000000..7fb8d8a
Binary files /dev/null and b/course-work/Implementations/Screenshot 2025-10-23 170733.png differ
diff --git a/course-work/Implementations/TwitchDb.sql b/course-work/Implementations/TwitchDb.sql
new file mode 100644
index 0000000..7a3b3e8
--- /dev/null
+++ b/course-work/Implementations/TwitchDb.sql
@@ -0,0 +1,209 @@
+CREATE TABLE [User] (
+ UserID INT IDENTITY PRIMARY KEY,
+ Username NVARCHAR(50) NOT NULL,
+ Email NVARCHAR(100) NOT NULL UNIQUE,
+ JoinDate DATETIME DEFAULT GETDATE(),
+ IsStreamer BIT DEFAULT 0
+);
+
+CREATE TABLE Channel (
+ ChannelID INT IDENTITY PRIMARY KEY,
+ Name NVARCHAR(100) NOT NULL,
+ Description NVARCHAR(255),
+ FollowersCount INT DEFAULT 0,
+ UserID INT NOT NULL UNIQUE,
+ FOREIGN KEY (UserID) REFERENCES [User](UserID)
+);
+
+CREATE TABLE Subscription (
+ SubscriptionID INT IDENTITY PRIMARY KEY,
+ Tier INT CHECK (Tier BETWEEN 1 AND 3),
+ Price DECIMAL(6,2),
+ StartDate DATE DEFAULT GETDATE(),
+ EndDate DATE NULL,
+ IsActive BIT DEFAULT 1,
+ UserID INT NOT NULL,
+ ChannelID INT NOT NULL,
+ FOREIGN KEY (UserID) REFERENCES [User](UserID),
+ FOREIGN KEY (ChannelID) REFERENCES Channel(ChannelID)
+);
+
+CREATE TABLE Donation (
+ DonationID INT IDENTITY PRIMARY KEY,
+ UserID INT NOT NULL,
+ ChannelID INT NOT NULL,
+ Amount DECIMAL(10,2) NOT NULL,
+ Currency NVARCHAR(10),
+ Message NVARCHAR(255),
+ DonatedAt DATETIME DEFAULT GETDATE(),
+ FOREIGN KEY (UserID) REFERENCES [User](UserID),
+ FOREIGN KEY (ChannelID) REFERENCES Channel(ChannelID)
+);
+
+CREATE TABLE Category (
+ CategoryID INT IDENTITY PRIMARY KEY,
+ Name NVARCHAR(100) NOT NULL,
+ GameType NVARCHAR(100)
+);
+
+CREATE TABLE Stream (
+ StreamID INT IDENTITY PRIMARY KEY,
+ ChannelID INT NOT NULL,
+ CategoryID INT,
+ Title NVARCHAR(150),
+ StartTime DATETIME DEFAULT GETDATE(),
+ EndTime DATETIME NULL,
+ ViewerCount INT DEFAULT 0,
+ FOREIGN KEY (ChannelID) REFERENCES Channel(ChannelID),
+ FOREIGN KEY (CategoryID) REFERENCES Category(CategoryID)
+);
+
+CREATE TABLE Clip (
+ ClipID INT IDENTITY PRIMARY KEY,
+ StreamID INT NOT NULL,
+ Title NVARCHAR(150),
+ Duration INT,
+ Views INT DEFAULT 0,
+ URL NVARCHAR(255),
+ FOREIGN KEY (StreamID) REFERENCES Stream(StreamID)
+);
+
+CREATE TABLE ChatMessage (
+ MessageID INT IDENTITY PRIMARY KEY,
+ UserID INT NOT NULL,
+ StreamID INT NOT NULL,
+ Content NVARCHAR(255),
+ SentAt DATETIME DEFAULT GETDATE(),
+ FOREIGN KEY (UserID) REFERENCES [User](UserID),
+ FOREIGN KEY (StreamID) REFERENCES Stream(StreamID)
+);
+
+CREATE TABLE Follow (
+ FollowerID INT NOT NULL,
+ FollowedID INT NOT NULL,
+ FollowDate DATETIME DEFAULT GETDATE(),
+ PRIMARY KEY (FollowerID, FollowedID),
+ FOREIGN KEY (FollowerID) REFERENCES [User](UserID),
+ FOREIGN KEY (FollowedID) REFERENCES [User](UserID)
+);
+
+
+
+--
+INSERT INTO [User] (Username, Email, IsStreamer) VALUES
+('Streamer1', 'streamer1@mail.com', 1),
+('ViewerA', 'viewerA@mail.com', 0),
+('ViewerB', 'viewerB@mail.com', 0);
+
+INSERT INTO Channel (Name, Description, UserID)
+VALUES ('Streamer1 Channel', 'Gameplay and fun', 1);
+
+INSERT INTO Category (Name, GameType)
+VALUES ('Action Games', 'FPS');
+
+INSERT INTO Stream (ChannelID, CategoryID, Title, ViewerCount)
+VALUES (1, 1, 'Live Stream #1', 250);
+
+INSERT INTO Subscription (Tier, Price, UserID, ChannelID)
+VALUES (1, 4.99, 2, 1),
+ (2, 9.99, 3, 1);
+
+INSERT INTO Donation (UserID, ChannelID, Amount, Currency, Message)
+VALUES (2, 1, 5.00, 'USD', 'W STREAM!'),
+ (3, 1, 10.00, 'USD', 'L STREAM');
+
+
+--:
+--
+CREATE FUNCTION GetTotalDonations(@ChannelID INT)
+RETURNS DECIMAL(10,2)
+AS
+BEGIN
+ DECLARE @Total DECIMAL(10,2);
+ SELECT @Total = SUM(Amount)
+ FROM Donation
+ WHERE ChannelID = @ChannelID;
+ RETURN ISNULL(@Total, 0);
+END;
+GO
+
+--
+CREATE FUNCTION GetUserSubscriptions(@UserID INT)
+RETURNS INT
+AS
+BEGIN
+ DECLARE @Count INT;
+ SELECT @Count = COUNT(*)
+ FROM Subscription
+ WHERE UserID = @UserID AND IsActive = 1;
+ RETURN ISNULL(@Count, 0);
+END;
+GO
+
+
+SELECT dbo.GetTotalDonations(1) AS TotalDonations;
+
+
+--:
+-- Subscription
+CREATE TRIGGER TR_DeactivateSubscription
+ON Subscription
+AFTER UPDATE
+AS
+BEGIN
+ UPDATE Subscription
+ SET IsActive = 0
+ WHERE EndDate < GETDATE();
+END;
+GO
+
+--
+CREATE TRIGGER TR_AddFollowerCount
+ON Donation
+AFTER INSERT
+AS
+BEGIN
+ UPDATE Channel
+ SET FollowersCount = FollowersCount + 1
+ WHERE ChannelID IN (SELECT ChannelID FROM inserted);
+END;
+GO
+
+
+
+-- :
+-- Donation
+CREATE PROCEDURE AddDonation
+ @UserID INT,
+ @ChannelID INT,
+ @Amount DECIMAL(10,2),
+ @Currency NVARCHAR(10),
+ @Message NVARCHAR(255)
+AS
+BEGIN
+ INSERT INTO Donation (UserID, ChannelID, Amount, Currency, Message)
+ VALUES (@UserID, @ChannelID, @Amount, @Currency, @Message);
+END;
+GO
+
+-- Channel
+CREATE PROCEDURE UpdateFollowers
+ @ChannelID INT,
+ @NewCount INT
+AS
+BEGIN
+ UPDATE Channel
+ SET FollowersCount = @NewCount
+ WHERE ChannelID = @ChannelID;
+END;
+GO
+
+
+EXECUTE AddDonation
+ @UserID = 3,
+ @ChannelID = 1,
+ @Amount = 25.00,
+ @Currency = 'USD',
+ @Message = 'Keep up the good work!';
+
+ select * From dbo.Donation
diff --git a/course-work/Implementations/Twitch_Conceptual_Chen.drawio b/course-work/Implementations/Twitch_Conceptual_Chen.drawio
new file mode 100644
index 0000000..e0979a0
--- /dev/null
+++ b/course-work/Implementations/Twitch_Conceptual_Chen.drawio
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/course-work/Implementations/Twitch_DataWarehouse_Diagram.drawio b/course-work/Implementations/Twitch_DataWarehouse_Diagram.drawio
new file mode 100644
index 0000000..be9a20f
--- /dev/null
+++ b/course-work/Implementations/Twitch_DataWarehouse_Diagram.drawio
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/course-work/Implementations/Twitch_Logical_Crowsfoot.drawio b/course-work/Implementations/Twitch_Logical_Crowsfoot.drawio
new file mode 100644
index 0000000..2a39303
--- /dev/null
+++ b/course-work/Implementations/Twitch_Logical_Crowsfoot.drawio
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/course-work/Implementations/Visualizations.pbix b/course-work/Implementations/Visualizations.pbix
new file mode 100644
index 0000000..5ab9bae
Binary files /dev/null and b/course-work/Implementations/Visualizations.pbix differ