diff --git a/apps/widcw/ChangeLog b/apps/widcw/ChangeLog
new file mode 100644
index 000000000..a4bc24d1a
--- /dev/null
+++ b/apps/widcw/ChangeLog
@@ -0,0 +1 @@
+0.01: First version
\ No newline at end of file
diff --git a/apps/widcw/logo.svg b/apps/widcw/logo.svg
new file mode 100644
index 000000000..e093414d5
--- /dev/null
+++ b/apps/widcw/logo.svg
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/apps/widcw/metadata.json b/apps/widcw/metadata.json
new file mode 100644
index 000000000..653b093ec
--- /dev/null
+++ b/apps/widcw/metadata.json
@@ -0,0 +1,13 @@
+{
+ "id": "widcw",
+ "name": "Calendar Week Widget",
+ "version": "0.01",
+ "description": "Widget which shows the current calendar week",
+ "icon": "widget.png",
+ "type": "widget",
+ "tags": "widget,calendar",
+ "supports": ["BANGLEJS","BANGLEJS2"],
+ "storage": [
+ {"name":"widcw.wid.js","url":"widget.js"}
+ ]
+}
diff --git a/apps/widcw/widget.js b/apps/widcw/widget.js
new file mode 100644
index 000000000..ef43a4551
--- /dev/null
+++ b/apps/widcw/widget.js
@@ -0,0 +1,48 @@
+(function() {
+ var width = 22; // width of the widget
+
+ function draw() {
+ const x = this.x, y = this.y, x2 = x+21, y2 = y+23;
+
+ var date = new Date();
+
+ // Calculate calendar week (https://stackoverflow.com/a/6117889)
+ getCW= function(date){
+ var d=new Date(date.getFullYear(), date.getMonth(), date.getDate());
+ var dayNum = d.getDay() || 7;
+ d.setDate(d.getDate() + 4 - dayNum);
+ var yearStart = new Date(d.getFullYear(),0,1);
+ return Math.ceil((((d - yearStart) / 86400000) + 1)/7);
+ };
+
+ g.reset().setFontAlign(0, 0) // center all text
+ // header
+ .setBgColor("#f00").setColor("#fff")
+ .clearRect(x, y, x2, y+8).setFont("4x6").drawString("CW", (x+x2)/2+1, y+5)
+ // date
+ .setBgColor("#fff").setColor("#000")
+ .clearRect(x, y+9, x2, y2).setFont("Vector:16").drawString(getCW(date), (x+x2)/2+2, y+17);
+
+ if (!g.theme.dark) {
+ // black border around date for light themes
+ g.setColor("#000").drawPoly([
+ x, y+9,
+ x, y2,
+ x2, y2,
+ x2, y+9
+ ]);
+ }
+
+ // redraw when date changes
+ setTimeout(()=>WIDGETS["widcw"].draw(), (86401 - Math.floor(date/1000) % 86400)*1000);
+
+ }
+
+ // add your widget
+ WIDGETS["widcw"]={
+ area:"tl", // tl (top left), tr (top right), bl (bottom left), br (bottom right)
+ width: width, // how wide is the widget? You can change this and call Bangle.drawWidgets() to re-layout
+ draw:draw // called to draw the widget
+ };
+
+})();
diff --git a/apps/widcw/widget.png b/apps/widcw/widget.png
new file mode 100644
index 000000000..c73d40c5a
Binary files /dev/null and b/apps/widcw/widget.png differ
diff --git a/apps/widcw/widget.svg b/apps/widcw/widget.svg
new file mode 100644
index 000000000..d3e567286
--- /dev/null
+++ b/apps/widcw/widget.svg
@@ -0,0 +1,55 @@
+
+
+
+