diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6b9cf2a..08e70cf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,6 +50,7 @@ set(SOURCE_FILES
     resource/resource.qrc
 
     gui/page/ui/settings.ui
+    gui/page/ui/homepage.ui
     ${WRAPPED_UI_FILES}
 
     inc/gitver.h
@@ -76,8 +77,10 @@ set(SOURCE_FILES
     inc/spkpopup.h gui/spkpopup.cpp
     inc/spkstretchlayout.h gui/spkstretchlayout.cpp
     inc/spkfocuslineedit.h
+    inc/spknotifydot.h gui/spknotifydot.cpp
 
     inc/page/spkpagebase.h gui/page/spkpagebase.cpp
+    inc/page/spkpagehome.h gui/page/spkpagehome.cpp
     inc/page/spkpageuitest.h gui/page/spkpageuitest.cpp
     inc/page/spkpageapplist.h gui/page/spkpageapplist.cpp
     inc/page/spkpageappdetails.h gui/page/spkpageappdetails.cpp
@@ -113,7 +116,8 @@ add_link_options(-rdynamic)
 find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
 
 QT5_WRAP_UI(WRAPPED_UI_FILES
-            gui/page/ui/settings.ui)
+            gui/page/ui/settings.ui
+            gui/page/ui/homepage.ui)
 
 add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES})
 
diff --git a/gui/page/spkpagebase.cpp b/gui/page/spkpagebase.cpp
index 507890c..a43a942 100644
--- a/gui/page/spkpagebase.cpp
+++ b/gui/page/spkpagebase.cpp
@@ -1,6 +1,29 @@
 
 #include "page/spkpagebase.h"
 
+/*
+ * Documentation on
+ * How to Add a New Page to Main Window Side Bar
+ *
+ * 1. Derive your page widget class from SpkPageBase (reference implementation
+ *    in SpkPageSettings) and add them to CMakeLists
+ *
+ * 2. Add the ID for the page in enum SpkUi::SpkStackedPages (in spkmainwindow.h)
+ *    and add it as a resource context if needed
+ *
+ * 3. Include the page's header file in spkmainwindow.h and add a pointer to it in
+ *    SpkUi::SpkMainWidget
+ *
+ * 4. Add a tree item or icon button for the corresponding page inside
+ *    SpkUi::SpkMainWidget, and initialize it in SpkUi::SpkMainWidget::SpkMainWidget.
+ *    Take references of existing entries, and write similar code close to each other
+ *    to make the source look nice. Don't forget to add the item to the UI.
+ *
+ * 5. Make the linkage between the page and the sidebar item at the end of
+ *    SpkUi::SpkMainWidget::SpkMainWidget().
+ *
+ */
+
 SpkPageBase::SpkPageBase(QWidget *parent) : QWidget(parent)
 {
 
diff --git a/gui/page/spkpagehome.cpp b/gui/page/spkpagehome.cpp
new file mode 100644
index 0000000..3c49d2a
--- /dev/null
+++ b/gui/page/spkpagehome.cpp
@@ -0,0 +1,39 @@
+
+#include <QDesktopServices>
+
+#include "page/spkpagehome.h"
+#include "spkabout.h"
+#include "gitver.h"
+
+SpkUi::SpkPageHome::SpkPageHome(QWidget *parent) :
+  SpkPageBase(parent)
+{
+  ui = new Ui::SpkHomepage;
+  ui->setupUi(this);
+
+  SetupUi();
+}
+
+void SpkUi::SpkPageHome::LinkActivated(QString s)
+{
+  QDesktopServices::openUrl(QUrl(s));
+}
+
+void SpkUi::SpkPageHome::SetupUi()
+{
+  ui->lblIcon->setPixmap(QIcon(":/icons/spark-store.svg").pixmap(QSize(128, 128)));
+
+  ui->hlayTitle->setAlignment(Qt::AlignHCenter);
+
+  ui->lblVersion->setText(ui->lblVersion->text().arg(GitVer::DescribeTags()));
+
+  connect(ui->lblAuthor, &QLabel::linkActivated,
+          this, &SpkPageHome::LinkActivated);
+  connect(ui->btnFeedback, &QPushButton::clicked,
+          [&](){ LinkActivated("https://www.deepinos.org/t/spark-feedback"); });
+  connect(ui->btnDonation, &QPushButton::clicked,
+          [&](){ LinkActivated("https://spark.deepinos.org.cn/"); });
+  connect(ui->btnAbout, &QPushButton::clicked,
+          [&](){ SpkAbout::Show(); });
+  ui->lblNewAnnouncement->setVisible(false);
+}
diff --git a/gui/page/ui/homepage.ui b/gui/page/ui/homepage.ui
new file mode 100644
index 0000000..162207d
--- /dev/null
+++ b/gui/page/ui/homepage.ui
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SpkHomepage</class>
+ <widget class="QWidget" name="SpkHomepage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>648</width>
+    <height>468</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Maximum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="hlayTitle">
+     <item>
+      <widget class="QLabel" name="lblIcon">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>{spark-store-icon}</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="lblTitle">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="font">
+        <font>
+         <pointsize>40</pointsize>
+        </font>
+       </property>
+       <property name="text">
+        <string>Spark Store</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QLabel" name="lblAuthor">
+     <property name="text">
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Brought to you by &lt;a href=&quot;spark-app.store&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;Spark Project&lt;/span&gt;&lt;/a&gt;, an open source software project.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>50</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <layout class="QGridLayout" name="vlayBtns">
+       <item row="1" column="0">
+        <widget class="QPushButton" name="btnAnnouncements">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>150</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Announcements</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QPushButton" name="btnFeedback">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>150</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Feedback</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QLabel" name="lblAboutProject">
+         <property name="text">
+          <string>About this project...</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QPushButton" name="btnDonation">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>150</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Donation</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="SpkNotifyDot" name="lblNewAnnouncement">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>20</width>
+           <height>20</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>0</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_3">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="lblVersion">
+       <property name="text">
+        <string>Version %1</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="btnAbout">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>About</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>SpkNotifyDot</class>
+   <extends>QLabel</extends>
+   <header>spknotifydot.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/gui/spkmainwindow.cpp b/gui/spkmainwindow.cpp
index 4929b3f..87b02ea 100644
--- a/gui/spkmainwindow.cpp
+++ b/gui/spkmainwindow.cpp
@@ -454,6 +454,10 @@ SpkUi::SpkMainWidget::SpkMainWidget(QWidget *parent) : QFrame(parent)
   CategoryWidget->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
 
   //============ Sidebar entries BEGIN ============
+  HomepageItem = new QTreeWidgetItem(QStringList(tr("Home")));
+  HomepageItem->setData(0, SpkSidebarSelector::RoleItemIsCategory, false);
+  HomepageItem->setData(0, SpkSidebarSelector::RoleItemCategoryPageId, SpkStackedPages::PgHomepage);
+
   AppDetailsItem = new QTreeWidgetItem(QStringList(tr("App Details")));
   AppDetailsItem->setData(0, SpkSidebarSelector::RoleItemIsCategory, false);
   AppDetailsItem->setData(0, SpkSidebarSelector::RoleItemCategoryPageId, SpkStackedPages::PgAppDetails);
@@ -471,6 +475,7 @@ SpkUi::SpkMainWidget::SpkMainWidget(QWidget *parent) : QFrame(parent)
 #endif
   //============ Sidebar entries END ============
 
+  CategoryWidget->addTopLevelItem(HomepageItem);
   SidebarMgr->AddUnusableItem(CategoryParentItem);
   CategoryWidget->addTopLevelItem(AppDetailsItem);
   CategoryWidget->addTopLevelItem(CategoryParentItem);
@@ -566,6 +571,10 @@ SpkUi::SpkMainWidget::SpkMainWidget(QWidget *parent) : QFrame(parent)
   PageSettings->setProperty("spk_pageid", SpkStackedPages::PgSettings);
   sorter[PgSettings] = PageSettings;
 
+  PageHome = new SpkUi::SpkPageHome(this);
+  PageSettings->setProperty("spk_pageid", SpkStackedPages::PgHomepage);
+  sorter[PgHomepage] = PageHome;
+
 #ifndef NDEBUG // If only in debug mode should we initialize QSS test page
   PageQssTest = new SpkUi::SpkPageUiTest(this);
   PageQssTest->setProperty("spk_pageid", SpkStackedPages::PgQssTest);
@@ -575,5 +584,8 @@ SpkUi::SpkMainWidget::SpkMainWidget(QWidget *parent) : QFrame(parent)
   for(auto i : sorter)
     Pager->addWidget(i);
 
+  // Default page selection : homepage
+  HomepageItem->setSelected(true);
+
   setLayout(HorizontalDivide);
 }
diff --git a/gui/spknotifydot.cpp b/gui/spknotifydot.cpp
new file mode 100644
index 0000000..bb9a020
--- /dev/null
+++ b/gui/spknotifydot.cpp
@@ -0,0 +1,35 @@
+
+#include <QPaintEvent>
+#include <QPainter>
+#include <QBrush>
+#include "spknotifydot.h"
+#include "spkstore.h"
+
+/*
+ * The font size and the actual geometry of this widget is hard coded
+ * If you want to use this widget code please consider improving it
+ */
+
+SpkNotifyDot::SpkNotifyDot(QWidget *parent) :
+  QLabel(parent)
+{
+
+}
+
+void SpkNotifyDot::paintEvent(QPaintEvent *e)
+{
+  QPainter p(this);
+
+  int h = height();
+
+  p.setRenderHint(QPainter::Antialiasing);
+  p.setBrush(QBrush(QColor(255, 70, 50)));
+  p.setPen(Qt::transparent);
+  p.drawEllipse(0, 0, h, h);
+  p.setBrush(QBrush(QColor(Qt::white)));
+  p.setPen(Qt::white);
+  p.setFont(QFont("sansserif", 10, 1000));
+  p.drawText(QRect(0, 0, h, h), Qt::AlignHCenter | Qt::AlignVCenter, text());
+
+  p.end();
+}
diff --git a/inc/page/spkpagehome.h b/inc/page/spkpagehome.h
new file mode 100644
index 0000000..5404dbc
--- /dev/null
+++ b/inc/page/spkpagehome.h
@@ -0,0 +1,25 @@
+
+#pragma once
+
+#include <QVBoxLayout>
+#include "page/spkpagebase.h"
+#include "ui_homepage.h"
+
+namespace SpkUi
+{
+  class SpkPageHome : public SpkPageBase
+  {
+      Q_OBJECT
+    public:
+      SpkPageHome(QWidget *parent = nullptr);
+      ~SpkPageHome() { }
+
+      Ui::SpkHomepage *ui;
+
+    private slots:
+      void LinkActivated(QString);
+
+    private:
+      void SetupUi();
+  };
+}
diff --git a/inc/spkmainwindow.h b/inc/spkmainwindow.h
index e971637..b752be5 100644
--- a/inc/spkmainwindow.h
+++ b/inc/spkmainwindow.h
@@ -17,6 +17,7 @@
 #include "spkfocuslineedit.h"
 #include "spkiconbutton.h"
 #include "page/spkpageuitest.h"
+#include "page/spkpagehome.h"
 #include "page/spkpageapplist.h"
 #include "page/spkpageappdetails.h"
 #include "page/spkpagedownloads.h"
@@ -29,6 +30,7 @@ namespace SpkUi
   enum SpkStackedPages
   {
     PgInvalid = -1,
+    PgHomepage,
     PgAppList,
     PgAppDetails,
     PgDownloads,
@@ -170,7 +172,8 @@ namespace SpkUi
       QMap<int, QTreeWidgetItem> *CategoryItemMap;
       SpkSidebarSelector *SidebarMgr;
 
-      QTreeWidgetItem *CategoryParentItem,
+      QTreeWidgetItem *HomepageItem,
+                      *CategoryParentItem,
                       *AppDetailsItem,
                       *DownloadsItem,
                       *UiTestItem;
@@ -182,6 +185,8 @@ namespace SpkUi
 
       //Pages
       SpkPageUiTest *PageQssTest;
+
+      SpkPageHome *PageHome;
       SpkPageAppList *PageAppList;
       SpkPageAppDetails *PageAppDetails;
       SpkPageDownloads *PageDownloads;
diff --git a/inc/spknotifydot.h b/inc/spknotifydot.h
new file mode 100644
index 0000000..0b2f593
--- /dev/null
+++ b/inc/spknotifydot.h
@@ -0,0 +1,17 @@
+
+#pragma once
+
+#include <QLabel>
+
+class SpkNotifyDot : public QLabel
+{
+    Q_OBJECT
+
+  public:
+    SpkNotifyDot(QWidget *parent = nullptr);
+    ~SpkNotifyDot() {}
+
+  protected:
+    virtual void paintEvent(QPaintEvent *) override;
+//    virtual int widthForHeight(int h) override;
+};
diff --git a/resource/stylesheets/default.css b/resource/stylesheets/default.css
index ea9ba15..f3e9ae2 100644
--- a/resource/stylesheets/default.css
+++ b/resource/stylesheets/default.css
@@ -187,6 +187,16 @@ SpkAppItem
 SpkAppItem::hover
 {
     background: DCTL1;
+}
+ /* homepage*/
+#lblTitle
+{
+    font-weiget: 700;
+    font-size: 40px;
+}
+
+#btnAnnouncements, #btnFeedback, #btnDonation
+{
 }
 
 #styAppItmTitle