diff --git a/src/App.config b/src/App.config
new file mode 100644
index 0000000..98d0f98
--- /dev/null
+++ b/src/App.config
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/App.xaml b/src/App.xaml
new file mode 100644
index 0000000..59d181c
--- /dev/null
+++ b/src/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/src/App.xaml.cs b/src/App.xaml.cs
new file mode 100644
index 0000000..432b74a
--- /dev/null
+++ b/src/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Kalakoi.Xbox.App
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/src/FriendSummary.xaml b/src/FriendSummary.xaml
new file mode 100644
index 0000000..a63e955
--- /dev/null
+++ b/src/FriendSummary.xaml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/FriendSummary.xaml.cs b/src/FriendSummary.xaml.cs
new file mode 100644
index 0000000..81e66bb
--- /dev/null
+++ b/src/FriendSummary.xaml.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Kalakoi.Xbox.OpenXBL;
+
+namespace Kalakoi.Xbox.App
+{
+ ///
+ /// Interaction logic for FriendSummary.xaml
+ ///
+ public partial class FriendSummary : UserControl
+ {
+ public FriendSummary()
+ {
+ InitializeComponent();
+ }
+
+ public Friend Friend
+ {
+ get { return (Friend)GetValue(FriendProperty); }
+ set { SetValue(FriendProperty, value); }
+ }
+
+ public static DependencyProperty FriendProperty =
+ DependencyProperty.Register(nameof(Friend), typeof(Friend), typeof(FriendSummary));
+
+ /*
+ public Uri ProfilePicture
+ {
+ get { return (Uri)GetValue(ProfilePictureProperty); }
+ set { SetValue(ProfilePictureProperty, value); }
+ }
+
+ public string Gamertag
+ {
+ get { return (string)GetValue(GamertagProperty); }
+ set { SetValue(GamertagProperty, value); }
+ }
+
+ public string Status
+ {
+ get { return (string)GetValue(StatusProperty); }
+ set { SetValue(StatusProperty, value); }
+ }
+
+ public string Presence
+ {
+ get { return (string)GetValue(PresenceProperty); }
+ set { SetValue(PresenceProperty, value); }
+ }
+
+ public static DependencyProperty ProfilePictureProperty =
+ DependencyProperty.Register(nameof(ProfilePicture), typeof(Uri), typeof(FriendSummary));
+
+ public static DependencyProperty GamertagProperty =
+ DependencyProperty.Register(nameof(Gamertag), typeof(string), typeof(FriendSummary));
+
+ public static DependencyProperty StatusProperty =
+ DependencyProperty.Register(nameof(Status), typeof(string), typeof(FriendSummary));
+
+ public static DependencyProperty PresenceProperty =
+ DependencyProperty.Register(nameof(Presence), typeof(string), typeof(FriendSummary));
+ */
+ }
+}
diff --git a/src/Kalakoi.Xbox.App.csproj b/src/Kalakoi.Xbox.App.csproj
new file mode 100644
index 0000000..62a907f
--- /dev/null
+++ b/src/Kalakoi.Xbox.App.csproj
@@ -0,0 +1,199 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {F3BEB689-21F7-4B9A-80F2-C44677DA5900}
+ WinExe
+ Properties
+ Kalakoi.Xbox.App
+ Kalakoi.Xbox.App
+ v4.7.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ FriendSummary.xaml
+
+
+
+
+ TestFriendView.xaml
+
+
+
+ LauncherView.xaml
+
+
+
+
+ MassMessageView.xaml
+
+
+
+
+ InputBoxView.xaml
+
+
+
+ ConversationView.xaml
+
+
+
+
+
+ FriendsListView.xaml
+
+
+
+
+
+
+ MessengerView.xaml
+
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+
+
+ ProfileViewerView.xaml
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {c1a3c6a1-4817-42c7-986a-2f51f223cfea}
+ Kalakoi.Xbox.OpenXBL
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/MVVM/ModelBase.cs b/src/MVVM/ModelBase.cs
new file mode 100644
index 0000000..20795e1
--- /dev/null
+++ b/src/MVVM/ModelBase.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Kalakoi.Xbox.App
+{
+ public abstract class ModelBase : PropertyChangedBase
+ {
+ public void SetProperty(ref T storage, T value, string name)
+ {
+ if ((storage?.GetType() != value?.GetType()) && storage != null && value != null)
+ throw new InvalidCastException("Nexthermal.CodeBase.WPF.ModelBase.UpdateProperty\nVariable type mismatch between storage and value.");
+ storage = value;
+ OnPropertyChanged(name);
+ }
+ }
+}
diff --git a/src/MVVM/PropertyChangedBase.cs b/src/MVVM/PropertyChangedBase.cs
new file mode 100644
index 0000000..4a53277
--- /dev/null
+++ b/src/MVVM/PropertyChangedBase.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Kalakoi.Xbox.App
+{
+ public abstract class PropertyChangedBase : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler PropertyChanged;
+ public void OnPropertyChanged(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+ }
+}
diff --git a/src/MVVM/RelayCommand.cs b/src/MVVM/RelayCommand.cs
new file mode 100644
index 0000000..31fbce9
--- /dev/null
+++ b/src/MVVM/RelayCommand.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Input;
+
+namespace Kalakoi.Xbox.App
+{
+ public class RelayCommand : ICommand
+ {
+ private Action