Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java	(revision a38443d7164777b9bb22fce886d67ad8de1cf8dc)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java	(revision 3bef91d07b23ee5f836027f7a78d4b6e11107378)
@@ -38,4 +38,6 @@
 import info.ajanovski.eprms.tap.services.PersonManager;
 import info.ajanovski.eprms.tap.services.ProjectManager;
+import info.ajanovski.eprms.tap.services.SystemConfigService;
+import info.ajanovski.eprms.tap.util.AppConstants;
 import info.ajanovski.eprms.tap.util.UserInfo;
 
@@ -61,4 +63,7 @@
 	private SelectModelFactory selectModelFactory;
 
+	@Inject
+	private SystemConfigService systemConfigService;
+
 	@InjectComponent
 	private Zone zNPModal;
@@ -198,30 +203,32 @@
 	@CommitAfter
 	public void onValidateFromFrmProposeProject() {
-		genericService.saveOrUpdate(newProject);
-		if (selectedTeam != null) {
-			if (!(newProject.getResponsibilities().stream()
-					.anyMatch(p -> p.getTeam().getTeamId() == selectedTeam.getTeamId()))) {
-				Responsibility r = new Responsibility();
-				r.setProject(newProject);
-				r.setTeam(selectedTeam);
-				List<Responsibility> listr = new ArrayList<Responsibility>();
-				listr.add(r);
-				newProject.setResponsibilities(listr);
-				genericService.saveOrUpdate(r);
-			}
-		}
-		if (selectedCourse != null) {
-			if (!(newProject.getCourseProjects().stream()
-					.anyMatch(p -> p.getCourse().getCourseId() == selectedCourse.getCourseId()))) {
-				CourseProject cp = new CourseProject();
-				cp.setProject(newProject);
-				cp.setCourse(selectedCourse);
-				List<CourseProject> listcp = new ArrayList<CourseProject>();
-				listcp.add(cp);
-				newProject.setCourseProjects(listcp);
-				genericService.saveOrUpdate(cp);
-			}
-		}
-		genericService.saveOrUpdate(newProject);
+		if (newProject.getCode() != null) {
+			genericService.saveOrUpdate(newProject);
+			if (selectedTeam != null) {
+				if (!(newProject.getResponsibilities().stream()
+						.anyMatch(p -> p.getTeam().getTeamId() == selectedTeam.getTeamId()))) {
+					Responsibility r = new Responsibility();
+					r.setProject(newProject);
+					r.setTeam(selectedTeam);
+					List<Responsibility> listr = new ArrayList<Responsibility>();
+					listr.add(r);
+					newProject.setResponsibilities(listr);
+					genericService.saveOrUpdate(r);
+				}
+			}
+			if (selectedCourse != null) {
+				if (!(newProject.getCourseProjects().stream()
+						.anyMatch(p -> p.getCourse().getCourseId() == selectedCourse.getCourseId()))) {
+					CourseProject cp = new CourseProject();
+					cp.setProject(newProject);
+					cp.setCourse(selectedCourse);
+					List<CourseProject> listcp = new ArrayList<CourseProject>();
+					listcp.add(cp);
+					newProject.setCourseProjects(listcp);
+					genericService.saveOrUpdate(cp);
+				}
+			}
+			genericService.saveOrUpdate(newProject);
+		}
 	}
 
@@ -409,3 +416,7 @@
 		}
 	}
+
+	public String getProjectURL() {
+		return projectManager.getProjectURL(project);
+	}
 }
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml	(revision a38443d7164777b9bb22fce886d67ad8de1cf8dc)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml	(revision 3bef91d07b23ee5f836027f7a78d4b6e11107378)
@@ -19,10 +19,12 @@
 				class="btn btn-default float-right">${message:cancel-label}</a>
 			<h3>${message:Join-label}&nbsp;${message:Team-label}</h3>
-			<div class="card bg-light mb-3" t:type="loop" t:source="listOfJoinableTeams"
-				t:value="joinableTeam">
+			<div class="card bg-light mb-3" t:type="loop"
+				t:source="listOfJoinableTeams" t:value="joinableTeam">
 				<div class="card-header">
 					<a class="btn btn-sm btn-primary float-right"
 						t:type="iconactionlink" t:id="joinTeam" t:context="joinableTeam"
-						t:path="plus">${message:Join-label}</a><h4>${joinableTeam.name}</h4></div>
+						t:path="plus">${message:Join-label}</a>
+					<h4>${joinableTeam.name}</h4>
+				</div>
 				<div class="card-body">
 					<t:outputraw t:value="joinableTeam.description" />
@@ -55,5 +57,10 @@
 				<t:beaneditor t:object="newProject" t:add="course,team"
 					t:exclude="projectId,status,startDate,finishDate"
-					t:reorder="team,course,code,title,description">
+					t:reorder="team,course,title,code,description">
+					<p:code>
+						<label t:type="label" t:for="code"></label>
+						<textfield t:id="code" t:type="textfield" t:validate="required,regexp"
+							t:value="newProject.code" />
+					</p:code>
 					<p:course>
 						<label t:type="label" t:for="selectCourse"></label>
@@ -182,4 +189,7 @@
 
 				<h3>${project.title}</h3>
+				<p t:type="if" t:test="projectUrl">
+					<a href="${projectUrl}">${projectUrl}</a>
+				</p>
 			</div>
 			<div class="card-body">
